- try, except를 사용해서 예외적으로 오류를 처리할 수 있게 해줌
- try 블록 수행 중 오류가 발생하면 except 블록이 수행
- try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않음
try:
...
except [발생 오류[as 오류 메시지 변수]]: # 괄호 안의 내용을 생략할 수 있다
...
[try, except문 사용방법 3가지]
- finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행
- finally절은 사용한 리소스를 close해야 할 때에 많이 사용
f = open('foo.txt', 'w')
try:
# 무언가를 수행한다.
finally:
f.close()
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("인덱싱 할 수 없습니다.")
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError as e:
print(e)
except IndexError as e:
print(e)
try:
a = [1,2]
print(a[3])
4/0
except (ZeroDivisionError, IndexError) as e:
print(e)
try:
f = open("나없는파일", 'r')
except FileNotFoundError:
pass # FileNotFoundError가 발생할 경우에 pass를 사용하여 오류를 그냥 회피하도록 작성
class Bird:
def fly(self):
raise NotImplementedError # NotImplementedError는 파이썬 내장 오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용
class Eagle(Bird):
pass
eagle = Eagle()
eagle.fly()
class MyError(Exception):
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
say_nick("천사")
say_nick("바보")
# "천사"가 한 번 출력된 후 MyError가 발생
class MyError(Exception):
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사")
say_nick("바보")
except MyError: # MyError 발생을 예외 처리
print("허용되지 않는 별명입니다.")
class MyError(Exception):
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사")
say_nick("바보")
except MyError as e:
print(e) # 오류 메시지가 출력되지 않음
class MyError(Exception):
def __str__(self): # 오류 메시지를 print문으로 출력할 경우에 호출되는 메서드
return "허용되지 않는 별명입니다."
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사")
say_nick("바보")
except MyError as e:
print(e)