try:
...
except:
...
try:
...
except 발생 오류: # ex) except ZeroDivisionError:
...
try:
...
except 발생 오류 as 오류 메시지 변수: # ex) except ZeroDivisionError as e:
...
f = open('foo.txt', 'w')
try:
... # 무언가 수행
finally:
f.close()
finally절
은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행.f.close()
사용try:
...
except 발생오류1:
...
except 발생오류2:
...
🌭 주의 !
try: a = [1, 2] print(a[3]) 4/0 except ZeroDivisionError: print("0으로 나눌 수 없습니다.") except IndexError: print("인덱싱 할 수 없습니다.")
**인덱싱 오류가 먼저 발생했으므로, ZeroDivisionError 오류는 발생하지 않음.
try: a = [1, 2] print(a[3]) 4/0 except (ZeroDivisionError, IndexError) as e: print(e)
** 2개 이상의 오류를 동일하게 처리하기 위해, 괄호로 묶어 함께 처리.
try:
...
except 발생오류1:
...
else:
... # 오류가 없을 경우에만 수행
🍕 상속받는 자식 클래스는 반드시 특정 함수를 구현하도록 만들고 싶은 경우
# 자식 클래스가 fly 함수를 구현하지 않는다면, 부모 클래스의 fly 함수가 수행되어 오류 발생
class Bird:
def fly(self):
raise NotImplementedError
🍟
NotImplementedError
: 파이썬 내장오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용
🍕 특수한 경우에만 예외처리 하기 위해 예외를 만들어 사용
class MyError(Exception): # 파이썬 내장 클래스인 Exception을 상속
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
say_nick("천사")
say_nick("바보") # 오류 발생
try:
say_nick("천사")
say_nick("바보")
except MyError:
print("허용되지 않는 별명입니다.")
class MyError(Exception):
def __str__(self): # __str__: 오류메시지를 print문으로 출력할 경우 호출
return "허용되지 않는 별명입니다."
.
.
try:
say_nick("천사")
say_nick("바보")
except MyError as e:
print(e) # __str__메서드 구현 없이는 메시지가 출력되지 않음
아래 내용을 바탕으로 정리한 것이다.
점프투파이썬 (https://wikidocs.net/30)