파이썬에는 몇 가지 일반적인 예외가 있습니다. 이러한 예외는 일반적으로 다른 프로그램에서 발생합니다. 프로그래머가 명시적으로 이러한 예외를 발생시키거나 파이썬 인터프리터가 이러한 유형의 예외를 묵시적으로 발생시킬 수 있습니다. 이러한 예외 중 일부는 다음과 같습니다.
예외 주장 오류
assert 문이 실패하면 AssertionError가 발생할 수 있습니다. 파이썬에는 몇 가지가 있습니다. 또한 코드에서 일부 assert 문을 설정할 수도 있습니다. assert 문은 항상 참이어야 합니다. 조건이 실패하면 AssertionError가 발생합니다.
예시 코드
class MyClass: def __init__(self, x): self.x = x assert self.x > 50 myObj = MyClass(5)
출력
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) <ipython-input-21-71785acdf821> in <module>() 4 assert self.x > 50 5 ----> 6 myObj = MyClass(5) <ipython-input-21-71785acdf821> in __init__(self, x) 2 def __init__(self, x): 3 self.x = x ----> 4 assert self.x > 50 5 6 myObj = MyClass(5) AssertionError:
예외 속성 오류
속성 오류는 클래스의 일부 속성에 액세스하려고 하지만 클래스에 존재하지 않을 때 발생할 수 있습니다.
예시 코드
class point: def __init__(self, x=0, y=0): self.x = x self.y = y def getpoint(self): print('x= ' + str(self.x)) print('y= ' + str(self.y)) print('z= ' + str(self.z)) pt = point(10, 20) pt.getpoint()
출력
x= 10 y= 20 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-15-f64eb52b2192> in <module>() 10 11 pt = point(10, 20) ---> 12 pt.getpoint() <ipython-input-15-f64eb52b2192> in getpoint(self) 7 print('x= ' + str(self.x)) 8 print('y= ' + str(self.y)) ----> 9 print('z= ' + str(self.z)) 10 11 pt = point(10, 20) AttributeError: 'point' object has no attribute 'z'
예외 가져오기 오류
가져오기 시 ImportError가 발생할 수 있습니다. 문에 일부 모듈을 가져오는 데 문제가 있습니다. from 문에 대한 패키지 이름이 정확하지만 지정된 이름으로 발견된 모듈이 없는 경우에도 발생할 수 있습니다.
예시 코드
from math import abcd def __init__(self, x=0, y=0):
출력
--------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-23-ff4519a07c77> in <module>() ----> 1 from math import abcd ImportError: cannot import name 'abcd'
예외 ModuleNotFoundError
ImportError의 하위 클래스입니다. 모듈이 없으면 이 오류가 발생할 수 있습니다. 없음일 때도 발생할 수 있습니다. sys.modules에서 찾을 수 있습니다.
예시 코드
import abcd
출력
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-24-7b45aaa048eb> in <module>() ----> 1 import abcd ModuleNotFoundError: No module named 'abcd'
예외 색인 오류
시퀀스(List, Tuple, Set 등)의 첨자가 범위를 벗어날 때 인덱스 오류가 발생할 수 있습니다.
예시 코드
myList = [10, 20, 30, 40] print(str(myList[5]))
출력
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-29-a86bd85b04c9> in <module>() 1 myList = [10, 20, 30, 40] ----> 2 print(str(myList[5])) IndexError: list index out of range
예외 재귀 오류
RecursionError는 런타임 오류입니다. 최대 재귀 깊이를 초과하면 증가합니다.
예시 코드
def myFunction(): myFunction() myFunction()
출력
--------------------------------------------------------------------------- RecursionError Traceback (most recent call last) <ipython-input-39-8a59e0fb982f> in <module>() 2 myFunction() 3 ----> 4 myFunction() <ipython-input-39-8a59e0fb982f> in myFunction() 1 def myFunction(): ----> 2 myFunction() 3 4 myFunction() ... last 1 frames repeated, from the frame below ... <ipython-input-39-8a59e0fb982f> in myFunction() 1 def myFunction(): ----> 2 myFunction() 3 4 myFunction() RecursionError: maximum recursion depth exceeded
예외 중지 반복
파이썬에서는 next()라는 내장 메소드에 의해 StopIteration 오류가 발생할 수 있습니다. 한 반복자에 더 이상 요소가 없으면 next() 메서드는 StopIteration 오류를 발생시킵니다.
예시 코드
myList = [10, 20, 30, 40] myIter = iter(myList) while True: print(next(myIter))
출력
10 20 30 40 --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-42-e608e2162645> in <module>() 2 myIter = iter(myList) 3 while True: ----> 4 print(next(myIter)) StopIteration:
예외 들여쓰기 오류
파이썬 코드에 잘못된 들여쓰기가 있으면 이런 종류의 오류가 발생합니다. SyntaxError를 상속합니다. 파이썬 클래스.
예시 코드
for i in range(10): print("The value of i: " + str(i))
출력
File "<ipython-input-44-d436d50bbdc8>", line 2 print("The value of i: " + str(i)) ^ IndentationError: expected an indented block
예외 유형 오류
TypeError는 부적절한 유형의 개체에 대해 작업을 수행할 때 발생할 수 있습니다. 예를 들어 배열 인덱스에 부동 소수점 숫자를 제공하면 TypeError가 반환됩니다.
예시 코드
muList = [10, 20, 30, 40] print(myList[1.25])
출력
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-46-e0a2a05cd4d4> in <module>() 1 muList = [10, 20, 30, 40] ----> 2 print(myList[1.25]) TypeError: list indices must be integers or slices, not float
예외 ZeroDivisionError
나눗셈 문제에서 분모가 0인 상황이 발생하면 ZeroDivisionError가 발생합니다.
예시 코드
print(5/0)
출력
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-48-fad870a50e27> in <module>() ----> 1 print(5/0) ZeroDivisionError: division by zero