안녕세계

[Python] try..except 예외처리 본문

[Python] try..except 예외처리

Junhong Kim 2018. 12. 3. 22:54
728x90
반응형

파이썬 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


728x90
반응형

'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
Comments