파이썬 튜토리얼-예외 처리

  1. try...except
  2. raise 예외
  3. try...finally
  4. 파이썬 내장 예외

이 섹션에서 파이썬 예외를 처리하는 방법을 배웁니다. 또한 예외를 제기하고 잡는 법을 배웁니다.

프로그램에서 예외가 발생하면 프로그램 실행이 종료됩니다. 그러나 대부분의 경우 프로그램의 비정상 종료를 선호하지 않으므로 프로그램 예외를 피하기 위해 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으로 나누면