파이썬 튜토리얼-예외 처리
이 섹션에서 파이썬 예외를 처리하는 방법을 배웁니다. 또한 예외를 제기하고 잡는 법을 배웁니다.
프로그램에서 예외가 발생하면 프로그램 실행이 종료됩니다. 그러나 대부분의 경우 프로그램의 비정상 종료를 선호하지 않으므로 프로그램 예외를 피하기 위해 Python 예외 처리를 사용할 수 있습니다.
try...except
다음 예에서는 10 개의 정수를 입력하라는 메시지가 표시됩니다. 사용자가 정수가 아닌 다른 유형을 입력하면 예외가 발생하고 except
블록의 명령문이 실행됩니다.
>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
try:
num = int(input('Enter a number: '))
sum = sum + num
i = i+1
except:
print('Please enter an integer!!')
break
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35
예를 들어 0으로 나누기가 발생하는 경우 지정된 예외를 포착 할 수 있습니다. 해당 예외를 다음과 같이 포착 할 수 있습니다.
try:
# statements
except ZeroDivisionError:
# exception handling
except:
# all other exceptions are handled here
raise
예외
raise
키워드를 사용하여 특정 예외가 발생하도록 할 수 있습니다.
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
raise ZeroDivisionError
ZeroDivisionError
>>> raise ValueError
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise ValueError
ValueError
자체 제기 예외에 일부 사용자 정의 정보를 추가해야하는 경우 예외 오류 유형 후 괄호 안에 추가 할 수 있습니다.
>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise NameError("This is a customized exception")
NameError: This is a customized exception
try...finally
try
블록에서 finally
블록은 선택 사항입니다. finally
블록이 있으면 어떤 경우에도 실행됩니다.
아래 예에서 설명합니다.
>>> try:
raise ValueError
finally:
print('You are in finally block')
You are in finally block
Traceback (most recent call last):
File "<pyshell#23>", line 2, in <module>
raise ValueError
ValueError
try ... finally
블록은 파일 작업시와 같은 정리 작업에 사용되므로 파일을 닫는 것이 좋습니다. 따라서 파일은 finally
블록에서 닫힙니다.
파이썬 내장 예외
이 섹션에서는 Python 프로그래밍의 표준 예외에 대해 배웁니다.
해석 중에 발생하는 런타임 오류는 예외입니다. 예를 들어, 숫자를 0으로 나누면 ZeroDivisionError
라는 런타임 오류가 발생합니다.
파이썬에는 아래에 설명 된 내장 예외가 있습니다.
예외 | 언제 제기 되나요? |
---|---|
AssertionError |
assert 문이 실패했을 때 |
AttributeError |
속성 참조가 실패한 경우 |
EOFError |
input() 함수가 데이터를 읽지 않고 파일의 끝에 도달했을 때. |
FloatingPointError |
부동 소수점 계산이 실패한 경우 |
GeneratorExit |
코 루틴이나 생성기가 닫히면 GeneratorExit 예외가 발생합니다 |
ImportError |
import 가 모듈을 찾을 수 없을 때 |
ModuleNotFoundError |
import 로 모듈을 찾을 수 없을 때. 이 예외는 ImportError 의 서브 클래스입니다. |
IndexError |
시퀀스의 인덱스가 범위에없는 경우 |
KeyError |
사전에 사전 키가없는 경우 |
KeyboardInterrupt |
인터럽트 키를 누를 때 |
MemoryError |
지정된 작업에 필요한 메모리 양이 적은 경우 |
NameError |
변수를 찾을 수 없을 때 |
NotImplementedError |
추상 메소드의 구현이 필요하지만 제공되지 않은 경우 |
OSError |
시스템 오류가 발생했을 때 |
OverFlowError |
값이 너무 커서 표현할 수없는 경우 |
RecursionError |
재귀 한계가 최대 수를 초과하는 경우 |
IndentationError |
함수, 클래스 등의 정의에 들여 쓰기가 올바르게 지정된 경우 |
SystemError |
시스템 관련 오류가 발견 된 경우 |
SystemExit |
sys.exit() 가 인터프리터를 종료하는 데 사용될 때. |
TypeError |
지정된 데이터 유형에 대해 조작이 유효하지 않은 경우 |
ValueError |
내장 함수에 유효한 인수가 있지만 제공된 값이 유효하지 않은 경우 |
RunTimeError |
생성 된 오류가 다른 범주에 해당하지 않는 경우 |
IOError |
I/O 작업이 실패한 경우 |
UnBoundLocalError |
지역 변수에 액세스했지만 값이없는 경우 |
SyntaxError |
구문 오류가있을 때 |
TabError |
불필요한 탭 들여 쓰기가있는 경우 |
UnicodeError |
유니 코드 관련 오류가 발생한 경우 |
UnicodeEncodeError |
인코딩으로 인해 유니 코드 관련 오류가 발생하는 경우 |
UnicodeDecodeError |
디코딩으로 인해 유니 코드 관련 오류가 발생하는 경우 |
UnicodeTranslateError |
번역으로 인해 유니 코드 관련 오류가 발생하는 경우 |
ZeroDivisionError |
숫자를 0으로 나누면 |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook