안녕세계
[Python] try..except 예외처리 본문
[Python] try..except 예외처리
Junhong Kim 2018. 12. 3. 22:54파이썬 exception
Python에서 예외처리 방법에 대해 알아봅니다.try
블록을 실행중에 에러가 발생하면 except
블록이 실행됩니다.
만약, try 블록에서 에러가 발생하지 않는다면 except 블록은 실행되지 않습니다.
try:
# ..
except [발생에러 as [에러 메시지 변수]]:
#..
try..except
에러 종류에 상관 없이 에러가 발생하면 except 블록을 실행합니다.
try:
# ..
except:
#..
try..except <에러>
에러가 발생했을 때 except 문에 미리 정해 놓은 에러와 일치할 때만 except 블록을 실행합니다.
try:
# ..
except <발생에러>:
#..
Example
try:
1 / 0
except ZeroDivisionError:
print('ZeroDivisionError')
try..except <에러> as <에러 메시지 변수>
에러 내용을 알고 싶을때는 에러 메시지 변수를 사용합니다.
try:
1 / 0
except ZeroDivisionError as e:
print(e)
에러 내용을 알고 싶을 때 에러 메시지 변수를 사용합니다.
try:
# ..
except <발생에러> as <에러 메시지 변수>:
# ..
Example
try:
1 / 0
except ZeroDivisionError as e:
print(e)
try..except..else
파이썬 try문은 else
절을 지원합니다.
else 절은 예외가 발생하지 않은 경우에 실행되며 except 절 바로 다음에 위치해야 합니다.
try:
# ..
except:
# ..
else:
# ..
try..except..else..finally
파이썬 try문은 finally
절을 지원합니다.
finally 절은 try문 실행 도중 예외 발생 여부에 상관없이 항상 실행됩니다.
일반적으로 finally 절은 사용한 리소스를 close해야할 경우에 자주 사용됩니다.
try:
# ..
except:
# ..
else:
# ..
finally:
# ..
Example
f = open('foo.txt', 'w')
try:
# ..
except:
# ..
else:
# ..
finally:
# foo.txt 파일을 쓰기 모드로 연후
# try 문이 수행된 이후 예외 발생 여부와 상관없이 close 합니다.
f.close()
try..except..except (다중 에러 처리)
파이썬 except는 다중 에러를 처리할 수 있습니다.
다음 예제에서는 print(a[3]) 구문에서 IndexError
를 발생시키므로,
print(1/0) 구문에서 발생되는 ZeroDivisionError
는 발생하지 않습니다.
try:
a = [1, 2]
print(a[3])
print(1 / 0)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
except IndexError:
print('인덱싱할 수 없습니다.)
에러 동시 처리
2개 이상의 에러를 동시에 처리 하기 위해서는 ()
괄호를 사용합니다.
try:
a = [1, 2]
print(a[3])
print(1/0)
except (ZeroDivisionError, IndexError) as e:
print(e)
에러 회피
pass를 사용하여 에러가 발생할 경우 무시할 수 있습니다.
try:
# try 문 내에서 FileNotFountError가 발생한 경우 pass를 사용하여 에러를 회피합니다.
f = open('foo.txt', 'r')
except FileNotFoundError:
pass
예외 만들기Exception
클래스를 상속하여 사용자 정의 에러를 만들 수 있습니다.
class CustomError(Exception):
def __init__(self, username):
self.username = username
def __str__(self):
return self.username + ' is not valid'
def is_valid_username(username):
if username == 'admin':
raise CustomError(username)
else:
print(username, 'is valid', )
try:
is_valid_username('guest')
# guest is valid
is_valid_username('admin')
# admin is not valid
except CustomError as e:
print(e)
References
'Language > Python' 카테고리의 다른 글
[Python] lambda 함수 (0) | 2019.01.03 |
---|---|
[Python] filter 함수 (0) | 2019.01.02 |
[Python] dictionary 자료형 (0) | 2018.12.03 |
[Python] args와 kwargs (0) | 2018.12.02 |
[Python] Comprehension (List, Set, Dictionary) (0) | 2018.03.30 |