5장 - 예외처리

Kiyong Lee·2021년 4월 18일
0

파이썬

목록 보기
14/21
post-custom-banner

프로그램을 만들다보면 수없이 많은 오류를 만나게 된다
오류를 만나기 싫을 때, 예외처리 해주는 것이 try, except문이다

오류는 어떤 때 발생하는가?

오류를 처리하는 방법을 알기 전에, 어떤 상황에서 오류가 발생하는지 한 번 알아보자

f = open("나없는 파일",'r')

이렇게 입력하면 FileNotFoundError:no such file or directory : '나없는 파일' 이라고 뜬다

또 다른 예를 들어 숫자를 0으로 나눈다고 하면 ZeroDivisionError가 뜬다

등등 여러가지 많은 오류를 맞이하게 될 거다

오류 예외 처리 기법

try, except 문

try :

except [발생 오류[as 오류 메시지 변수]] :

try문 실행 중 오류가 발생하면 except 문이 발생한다는 뜻이다

해당 구문도 3가지로 나눌 수 있는데

try, except만 쓰는 방법

try :

except :

이 경우, 오류 종류에 상관없이 오류가 발생하면 except 블록을 수행한다

발생 오류만 포함한 except문

try :

except 발생오류 :

발생오류와 오류 메시지 변수까지 포함한 except문

try :

except 발생오류 as 오류 메시지 변수 :

예를 들어

try : 4/0

except ZeroDivsionError as e : print(e)

라고 쓰고 실행하면 division by zero라고 나온다

try finally

try문에는 finally절을 사용할 수 있다

finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다

보통 finally절은 사용한 리소스를 close해야 할 떄 많이 사용한다이 사용한다

아 JAVA에서 try-catch-finally 이거구나

여러개의 오류 처리하기

try문 안에서 여러 개의 오류를 처리하기 위해 다음 구문을 사용한다

try :

except :

except :

근데 이렇게 쓰기 귀찮다보니, 함께 처리할 수 있는데

except('error', 'error') as e : 이렇게 에러 문구를 묶어주는 것이다

또한 try문에 else를 이용할 수 있는데

try :

except

else:
if
else

이런식으로 사용할 수 있다

오루 회피하기

except에 pass 쓰면 됨

오류 일부러 발생시키기

raise 에러문구 <- 이렇게 쓴다

예외 만들기

종종 특수한 경우에만 예외 처리를 하기 위해, 종종 만든다고..한다

class MyError(Exception) :
pass

def say_nick(nick) :
if nick == '바보' :
raise MyError()
print(nick)

say_nick('천사')
say_nick('바보')

이렇게 하면 천사가 출력되고 에러가 발생하는데 main.MyError 라고 쓰여 있다

그래서 오류가 안나게 하기 위해 try,except를 쓸거다래서 오류가 안나게 하기 위해 try,except를 쓸거다

class MyError(Exception) :
pass

def say_nick(nick) :
if nick == '바보' :
raise MyError()
print(nick)

try:

say_nick('천사')
say_nick('바보')

except 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)

근데 이렇게 as e라고 쓰면 아무것도 안 뜨는데, 그럴 경우 class에서 str 메서드를 구현해야 한다

class MyError(Exception) :
def str(self) :
return "허용 ㄴㄴ"

def say_nick(nick) :
if nick == '바보' :
raise MyError()
print(nick)

try:

say_nick('천사')
say_nick('바보')

except MyError as e:
print(e)

str 메서드는 print(e)처럼 오류 메시지를 print문으로 출력할 경우 호출되는 메서드이다

profile
ISTJ인 K-개발자
post-custom-banner

0개의 댓글