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

Jinku Hu 2023년1월30일
  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으로 나누면
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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