SW개발/Python

[Python]예외처리 - try, except, else, finally (raise) 사용하기

if, else 문으로만 모든 에러를 처리한다면 indent가 늘어남에 따라 가독성이 떨어지는 코드가 되기 마련입니다. 따라서, 예외처리 구문을 사용하여 코드를 깔끔하게 작성하도록 하여야 합니다.

이번 포스팅에서는 Python의 예외처리 방법에 대해서 간단하게 알아보겠습니다.

 

Python의 예외처리의 기본 흐름은 try -> except -> else -> finally 순으로 진행됩니다. 모든 단계를 사용할 필요는 없고 필요에 따라 적절히 골라서 사용하면 됩니다. 하나씩 설명해보겠습니다.

 

try & except

try:
    # 에외처리할 코드
    print(10/0)
except ZeroDivisionError:
    # 발생하는 에러에 대한 처리
    print("zero division error")

가장 기본적으로 사용되는 try, except 구문입니다. try 구문에는 예외처리의 대상이 되는 코드를 넣어주고, except 에는 발생이 예상되는 에러를 적습니다. 위의 예제에서는 ZeroDivisionError라고 에러를 명시해주었지만, 이를 생략한다면 어떤 종류의 예외도 처리가 가능합니다.

 

except 구문의 우선순위

try:
    # 에외처리할 코드
    print(10/0)
    print(leffe)
    
except NameError:
    # 먼저 쓸 수록 높은 우선순위
    print("name error")
except ZeroDivisionError:
    # 발생하는 에러에 대한 처리
    print("zero division error")

except 구문의 경우 위에 적은 에러가 우선순위를 가집니다. 첫번째 print를 실행하는 경우 ZeroDivisionError가 발생하는데, except에 적힌 순서에 따라 NameError인지를 먼저 체크하고 다음에 존재하는 except를 체크하여 "zero division error"를 출력하게 됩니다.

 

다수의 except

try:
    # 에외처리할 코드
    print(leffe)
    
except NameError, ZeroDivisionError:
    # 발생하는 에러에 대한 처리
    print("Name or ZeroDivision error")

하나의 except에 여러 개의 에러를 처리할 수도 있습니다. NameError, ZeroDivisionError중 하나라도 에러가 발생한다면 print 구문을 실행하게 됩니다.

 

에러 무시하기

try:
    # 에외처리할 코드
    print(leffe)
    
except NameError:
    # 발생하는 에러에 대한 처리
    pass

pass문을 활용한다면 에러가 발생할 때 아무런 처리를 하지 않고 넘어가게 할 수도 있습니다. 코드의 목적에 따라 다양하게 활용될 수 있습니다.

 

try & except & else

try:
    # 에외처리할 코드
    print(10/2)
except ZeroDivisionError:
    # 발생하는 에러에 대한 처리
    print("zero division error")
else:
    # 에러가 발생하지 않았을 경우에 실행
    print("no error :)")

else 구문을 활용한다면 에러가 발생하지 않았을 경우에 실행될 코드를 작성할 수 있습니다.

 

try & except & else & finally

try:
    # 에외처리할 코드
    print(10/2)
except ZeroDivisionError:
    # 발생하는 에러에 대한 처리
    print("zero division error")
else:
    # 에러가 발생하지 않았을 경우에 실행
    print("no error :)")
finally:
    # 예외 발생여부에 관계없이 항상 실행
    print("always")

finally 구문은 에러의 발생여부와 관계없이 항상 코드를 실행하는 부분입니다. 마찬가지로 여러 방면에서 활용될 수 있습니다.

 

raise - 에러 발생시키기 

try:
    # 에외처리할 코드
    print(3)
    # 강제로 에러를 발생시킴
    raise NameError
    
except NameError:
    # 발생하는 에러에 대한 처리
    print("Name or ZeroDivision error")

raise 구문은 에러를 강제로 발생시키게 할 수 있습니다. 위의 코드는 정상적으로 동작하는 코드이지만 raise 구문에 의해 except 내의 코드가 실행되게 됩니다.

 

지금까지 Python에서의 예외처리를 알아보았습니다. 저도 try, except 구문은 익숙하게 사용하고 있었지만 else, finally와 같은 구문은 잘 사용하지 않았던 것 같습니다. 알아둔다면 적절한 상황에서 코드를 깔끔하게 작성할 수 있을 것 같아 정리를 해보았습니다.

 

728x90