[Python] 예외처리하기
- Language/Python
- 2020. 10. 19.
예외란, 코드를 실행하는 중에 발생한 에러를 뜻한다.
에러가 발생하면 코드 실행이 중단되지만, 예외처리를 하게 된다면 멈추지 않고 계속해서 진행하게 된다.
try:
x = int(input('나눌 숫자를 입려갛세요. : '))
y = 10 / x
print(y)
except:
print('예외가 발생했습니다.')
0을 입력할 경우
>>> 예외가 발생했습니다.
숫자를 0으로 나누면 ZeroDivisionError 예외가 발생한다. 여기서 except에서 예외 처리를 하도록 만들었으므로
print('에ㅚ가 발생했습니다.')가 실행된다.
특정 예외만 처리하기
y = [10, 20, 30]
try:
index, x = map(int, input('인덱스와 나눌 숫자를 입력하세요: ').split())
print(y[index] / x)
except ZeroDivisionError:
print('예외가 발생했습니다.')
except IndexError:
print('잘못 된 인덱스 입니다.')
2 0 을 입력할 경우
>>>예외가 발생했습니다.
예외가 여러개 있듯이 예외처리방법 또한 여러개가 있다.
그 중 이렇게 선택을 한다면, 원하는 에러처리로 만들 수가 있다.
예외의 에러 메세지 받아오기
y = [10, 20, 30]
try:
index, x = map(int, input('인덱스와 나눌 숫자를 입력하세요: ').split())
print(y[index] / x)
except ZeroDivisionError as e:
print('예외가 발생했습니다.', e)
except IndexError as e:
print('잘못 된 인덱스 입니다.', e)
2. 0을 입력했을 경우
>>>예외가 발생했습니다. division by zero
except의 에러를 담아 print를 통해 출력한다.
else 예외 발생하지 않음
try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 /x
except ZeroDivisionError:
print('숫자를 0으로 나눌 수 없습니다. ')
else :
print(y)
정상적으로 입력이 되었을 경우
else의 print(y)가 작동 되면서 결과를 출력한다.
except가 실행되지 않았을 경우에만 실행되며 정상적으로 작동되었다는 것을 의미한다.
예외와는 상관없이 항상 코드 실행하기
try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 /x
except ZeroDivisionError:
print('숫자를 0으로 나눌 수 없습니다. ')
else :
print(y)
finally:
print('코드 실행이 끝났습니다.')
finally는 except와 else와 상관없이 무조건 실행되는 코드이다.
당연히 except와 else를 생략 할 수 있다.
예외 발생시키기
try:
x = int(input('3의 배수를 입력하세요:'))
if x % 3 != 0:
raise Exception('3의 배수가 아닙니다.')
print(x)
except Exception as e:
print('예외가 발생했습니다.', e)
3의 배수를 입력하지 않을 경우
raise가 실행되어 except가 실행된다.
사용자 정의 except 실행되며 따라서 raise는 반드시 try 안에 있어야 한다.
현재 예외를 다시 발생시키기, 함수 사용하기
def three_multiple():
try:
x = int(input('3의 배수를 입력하세요:'))
if x % 3 != 0:
raise Exception('3의 배수가 아닙니다.')
print(x)
except Exception as e:
print('예외가 발생했습니다.', e)
raise
try :
three_multiple()
except Exception as e:
print('스크립트 파일에서 예외가 발생했습니다. ', e)
함수를 통해 예외발생 처리를 진행하였다.
그리고 함수의 raise가 붙어 있다면 현재의 error를 호출한 함수에도 전달해준다.
만약 raise가 없을 경우, 메인의 try는 성공적으로 처리되었다. 그래서 except가 실행되지 않았지만,
raise가 있어서 메인에 있는 try 또한 except가 호출되었다.
따라서 try는 정상적으로 끝마치지 못 했으므로 except가 발생해서 error code가 또 한 번 나타나는 것을 확인 할 수가 있다.
예외 만들기
class NotThreeMultipleError(Exception):
def __init__(self):
super().__init__('3의 배수가 아닙니다.')
def three_multiple():
try:
x = int(input('3의 배수를 입력하세요: '))
if x % 3 != 0:
raise NotThreeMultipleError
print(x)
except Exception as e :
print('예외가 발생했습니다. ', e)
three_multiple()
상속 시키고 예외를 만든다.
__init__ 생성자를 통해 예외처리 코드를 만들어 놓으면, raise를 통해 만들어 놓은 예외를 실행 시킬 수 있다.
'Language > Python' 카테고리의 다른 글
[Python] 데코레이터 (0) | 2020.10.19 |
---|---|
[Python] 코루틴 사용하기 (1) | 2020.10.19 |
[Python] 클래스 상속하기 (0) | 2020.10.16 |
[Python] 클래스 속성과 정적, 클래스 메소드 사용하기 (0) | 2020.10.16 |
[Python] 클래스 사용하기 (0) | 2020.10.16 |