프로그래밍 언어의 오류에는 2가지 종류가 있습니다.

구문오류 - 프로그램 실행 전에 발생하는 오류

예외, 런타임오류 - 프로그램 실행 중에 발생하는 오류

구문오류(Syntax error)

괄호의 갯수, 들여쓰기 문제 등으로 발생하는 오류입니다.

구문 오류는 해결하지 않으면 프로그램 자체가 실행되지 않습니다.

 

예외(exception), 런타임오류(runtime error)

실행중에 발생하는 오류입니다.

 

기본 예외 처리(exception handling

예외를 해결하는 과정의 모든 것을 예외 처리라고 부릅니다.

조건문을 사용하는 방법

try 구문을 사용하는 방법

 

number_input_a = int(input("정수 입력> "))

print("원의 반지름:", number_input_a)
print("원의 둘레:", 2 * 3.14 * number_input_a)
print("원의 넓이:", 3.14 * number_input_a * number_input_a)

이렇게 코드를 만들고 숫자를 입력하면 결과 값이 나옵니다.

정수 입력> 15
원의 반지름: 15
원의 둘레: 94.2
원의 넓이: 706.5

그런데 입력할 때 숫자와 함께 문자를 넣으면 에러가 발생하는데요.

정수 입력> 15cm   
Traceback (most recent call last):
  File "h06.py", line 1, in <module>
    number_input_a = int(input("정수 입력> "))
ValueError: invalid literal for int() with base 10: '15cm'

 

이런 문제를 해결하기 위해 조건문으로 예외처리해 보겠습니다.

 

# 숫자를 입력받습니다.
user_input_a = input("정수 입력> ")

# 사용자 입력이 숫자로만 구성되어 있을 때
if user_input_a.isdigit():
    # 숫자로 변환합니다.
    number_input_a = int(user_input_a)
    # 출력합니다.
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
else:
    print("정수를 입력하지 않았습니다.")

숫자와 문자를 함께 넣어도 문제없이 프로그램이 작동되는 것을 확인할 수 있습니다.

그런데 조건문 만으로 예외처리 할 수 없기에 try except 구문을 사용하는 것이 편리합니다.

 

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드

   

try:
    number_input_a = int(input("정수 입력> "))
    
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)

except:
    print("문제가 생겼습니다.")

 

try except 구문과 pass 키워드를 조합해서 예외가 발생하면 그냥 넘어가도록 할 수도 있습니다.

 

try excepr else 구문

try:
    # 예외가 발생할 가능성이 있는 코드
    number_input_a = int(input("정수 입력> "))
    
except:
    # 예외가 발생했을 때 실행할 코드
    print("정수를 입력하지 않았습니다.")

else:
    # 예외가 발생하지 않았을 때 실행할 코드
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)

 

finally 구문

try:
    # 예외가 발생할 가능성이 있는 코드
    number_input_a = int(input("정수 입력> "))
    
except:
    # 예외가 발생했을 때 실행할 코드
    print("정수를 입력하지 않았습니다.")

else:
    # 예외가 발생하지 않았을 때 실행할 코드
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
    
finally:
    # 무조건 실행할 코드
    print("무조건 출력되는 문장이랍니다.")
"""
정수 입력> 15
원의 반지름: 15
원의 둘레: 94.2
원의 넓이: 706.5
무조건 출력되는 문장이랍니다.
"""

 

구문 오류와 예외의 차이는

구문 오류는 프로그램의 문법적인 오류로 실행조차 되지 않는 오류이고요.

예외는 프로그램 실행 중에 발생하는 오류입니다.

이런 오류를 방지하기 위해 try except 구문을 사용합니다.

 

 

예외 고급

try:
    # 예외가 발생할 가능성이 있는 코드
    number_input_a = int(input("정수 입력> "))
    
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
    
    
except Exception as exception:
    # 예외 객체를 출력해봅니다.
    print("type(exception): ", type(exception))
    print("exception: ", exception)
정수 입력> 8cm 
type(exception):  <class 'ValueError'>
exception:  invalid literal for int() with base 10: '8cm'

이 코드에서는 잘못된 값을 입력할 때 생기는 ValueError이 나오는데요.

값의 범위를 벗어나는 경우에는 IndexError이 발생됩니다.

 

list_number = [4, 2, 42, 53, 170]

try:
    number_input_a = int(input("정수 입력> "))
    
    print("{}번째 요소: {}".format(number_input_a, list_number[number_input_a]))
    
except Exception as exception:
    # 예외 객체를 출력해봅니다.
    print("type(exception): ", type(exception))
    print("exception: ", exception)

이렇게 코딩을 해서 

정수 입력> 2
2번째 요소: 42

이렇게 출력이 되는데요.

정수 입력> 10
type(exception):  <class 'IndexError'>
exception:  list index out of range

 

범위를 넘어서는 값을 입력하면 에러가 납니다.

이렇게 예외의 종류가 달라지는데요.

예외의 종류에 따라 구분하는 코드를 만들어 보겠습니다.

 

list_number = [4, 2, 42, 53, 170]

try:
    number_input_a = int(input("정수 입력> "))
    
    print("{}번째 요소: {}".format(number_input_a, list_number[number_input_a]))
    
except ValueError:
    print("정수를 입력해 주세요")
    
except IndexError:
    print("리스트의 범위를 벗어났습니다.")

이렇게 만들면 되고요.

이외에도 다양한 에러가 발생했을 때 실행할 예외구문을 넣어 주는 경우가 필요한데요.

이럴때는 가장 뒤에 

except Exception as exception:
    # 예외 객체를 출력해봅니다.
    print("미리 파악하지 못한 예외가 밠애했습니다.")
    print("exception: ", exception)

를 추가시켜 주면 됩니다.

 

raise 구문

아직 구현되지 않은 부분이므로 일부러 예외를 발생시켜 프로그램을 주겍 만들어 잊지않도록 하는 키워드입니다.

raise 예외 객체

 

 

'혼공파' 카테고리의 다른 글

07-2 외부 모듈  (0) 2024.02.11
혼공파 7장 모듈(1)  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch3 조건문  (1) 2024.01.15

 

파이썬을 설치할 때 Add Python ** 체크하는 이유

 

파이썬을 공부할 때 필요한 것은 뭐가 있을까요?
1. 파이썬 코드를 입력할 수 있는 텍스트 에디터
2. 파이썬 코드를 실행하는 파이썬 인터프리터
파이썬 프롬프트라 불리는 >>> 에 코드를 입력하면 바로 실행결과를 볼 수 있는데요.
이것을 상호작용하는 공간이라는 의미로 인터렉티브 셸
또는 한 마디씩 대화를 주고 받기 때문에 대화형 셸이라 부른다고 하네요.
키워드는 특별한 의미가 부여된 단어, 파이썬이 미리 예약한 단어이기 때문에 사용할 수 없다.
식별자는 프로그래밍 언어에서 이름을 붙일 때 사용하는 단어, 변수, 함수, 클래스로 사용된다.
키워드를 사용하면 안되고, 특수 문자는 _만 사용, 숫자를 가장 앞에 넣어서 사용할 수 없다. 공백 X

프로그램은 자료를 처리하는 역할을 합니다.
카메라로 사진을 찍으면 사진이 자료이고, 이를 카메라에 저장하는 것이 처리입니다.
카카오톡으로 친구에게 사진과 함께 "여기 어때?"라는 메시지를 보냈다면 사진과 메시지가 자료이고, 이를 친구에게 전송하는 것이 처리입니다.

자료의 형식을 확인할 때 type() 함수 사용
이스케이프문자는 역슬래시(\) 기호와 함께 조합해서 사용하는 특수한 문자를 의미한다.
\n : 줄바꿈을 의미합니다. 
\r : 탭을 의미합니다.

문자열 연산자
문자열 연결 연산자 : +
문자열은 무조건 문자열끼리 + 기호를 사용해서 연결해야 한다.
숫자라 하더라도 문자열과 함께 + 연산하려면 ""로 붙여 주어야 한다.
문자열 반복 연산자 : *
문자열 * 숫자
숫자만큼 문자열을 반복해서 출력한다.
문자 선택 연산자(인덱싱) : []
문자 선택 연산자는 문자열 내부의 문자 하나를 선택하는 연산자이다.
[]안에 선택할 문자의 위치를 지정하며 이 숫자를 인덱스라고 부른다.
파이썬은 제로 인덱스
문자열 범위 선택 연산자(슬라이싱) [:]
문자열의 범위를 선택할 때 사용하는 연산자
[] 기호를 이용해 문자열의 특정 위치에 있는 문자를 참조하는 것을 인덱싱이라 하고, [:]기호를 이용해 문자열의 일부를 추출하는 것을 슬라이싱이라 합니다;.


기본 미션: p. 101 3~5번 실행 결과 쓰고 인증하기
3번 문제
print("# 연습문제")
print("\\\\\\\\")
print("-" *😎


4번 문제
print("안녕하세요"[1])
print("안녕하세요"[2])
print("안녕하세요"[3])
print("안녕하세요"[4])
print("안녕하세요"[5])


5번 문제
print("안녕하세요"[1:3])
print("안녕하세요"[2:4])
print("안녕하세요"[1:])
print("안녕하세요"[:3])




#혼공학습단 #혼공 #혼공파

'혼공파' 카테고리의 다른 글

혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch3 조건문  (1) 2024.01.15
혼공파 ch2 자료형  (0) 2024.01.14

+ Recent posts