Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 try except 완벽 가이드: 예외 처리 기초부터 활용까지

파이썬의 try…except 문은 예외(exception)를 처리하는 구문입니다. try 블록 안에 작성된 코드를 실행하며 오류가 있는지 검사하고, 오류가 발생하면 except 블록의 코드가 실행됩니다.


파이썬에서 try와 except 사용 방법

프로그램을 개발하다 보면 특정 코드 블록이 정상적으로 동작하는지 확인한 후 나머지 프로그램을 실행하고 싶을 때가 있습니다. 예를 들어 대규모 신규 코드를 작성했다면, 전체 프로그램을 실행하기 전에 해당 코드가 제대로 작동하는지 먼저 검증해야 합니다.

try…except 블록을 사용하면 코드를 테스트하고, 예외가 발생했을 때 이를 적절하게 처리할 수 있습니다. 또한 finally와 else 문을 추가하여 try…except 블록의 실행 결과에 따라 추가 코드를 실행하도록 설정할 수도 있습니다.

이 글에서는 파이썬에서 try와 except를 사용하는 방법을 예제와 함께 자세히 알아보겠습니다.

파이썬 오류와 예외의 종류

파이썬에서 마주칠 수 있는 오류는 크게 두 가지입니다. 바로 문법 오류(syntax error)예외(exception)입니다.

문법 오류는 잘못된 문법을 사용했을 때 발생합니다. 예를 들어 while True 반복문 끝에 콜론(:)을 붙이지 않으면 프로그램은 오류를 보고합니다. 문법 오류가 발생하면 파일 이름, 줄 번호, 그리고 오류가 있을 가능성이 있는 위치를 알려주는 표시가 함께 출력됩니다.

예외는 문법은 올바르지만 코드 실행 중에 문제가 발생하는 오류 유형입니다. 예외의 종류는 매우 다양하지만, 그중에서도 자주 만나게 되는 대표적인 예외는 다음과 같습니다.

  • ArithmeticError — 산술 연산 관련 오류
  • ImportError — 모듈 임포트 실패
  • ZeroDivisionError — 0으로 나누기 시도
  • NameError — 정의되지 않은 변수 참조
  • TypeError — 잘못된 타입의 연산 시도

파이썬 try…except 문의 기본 구조

try…except 문은 먼저 try 블록 아래의 코드를 실행합니다. 이 코드가 성공적으로 실행되지 않으면, 프로그램은 오류가 발생한 지점에서 멈추고 except 블록의 코드를 실행합니다.

try 블록은 오류가 발생할 수 있는 코드를 검사하는 역할을 하고, except 블록은 발생한 오류를 사용자가 정의한 방식으로 처리할 수 있게 해줍니다.

try…except 블록의 기본 문법은 다음과 같습니다.

try:
    실행할 코드...
except:
    오류 발생 시 실행할 코드...

try와 except 문 안에는 유효한 파이썬 코드라면 어떤 것이든 넣을 수 있습니다.

try…except 예제

다음은 try…except 블록의 실제 사용 예시입니다.

try:
    print(ourVariable)
except:
    print('오류가 반환되었습니다')

위 예제에서는 ourVariable이라는 변수를 선언하지 않은 상태에서 try 블록 안에서 사용하려고 시도합니다.

만약 try…except 블록이 없다면 프로그램은 오류 메시지를 출력하며 중단됩니다. 디버깅 중에는 오류 메시지가 유용하지만, 일반 사용자에게 낯선 오류 메시지가 그대로 노출되면 혼란을 줄 수 있습니다.

try…except 블록 덕분에 우리 코드는 오류가 발생했을 때 무엇을 해야 할지 알고 있습니다. 위 코드의 실행 결과는 다음과 같습니다.

오류가 반환되었습니다

이처럼 try…except 블록을 사용하면 예외를 우아하게(gracefully) 처리할 수 있습니다. 나아가 파이썬의 logging 모듈 같은 패키지를 활용해 발생한 예외를 로그 파일에 저장하면, 프로그램에서 발생한 예외 이력을 체계적으로 추적할 수 있습니다.

여러 개의 except 문 사용하기

except 문은 오류 유형별로 여러 번 반복해서 작성할 수 있습니다. 이는 여러 예외 중 하나가 발생할 것으로 예상되지만 어떤 예외가 발생할지 확실하지 않은 경우에 특히 유용합니다.

다음은 NameError를 검사하는 try…except 블록의 예제입니다.

try:
    print(ourVariable)
except NameError:
    print('ourVariable이 정의되지 않았습니다')
except:
    print('오류가 반환되었습니다')

이 경우 코드는 NameError를 반환하기 때문에 'ourVariable이 정의되지 않았습니다'라는 메시지가 출력됩니다. 테스트하는 코드에 따라 ZeroDivisionError나 OSError 같은 다른 예외를 추가로 검사할 수도 있습니다.

예를 들어 파일을 열 때는 IOError와 FileNotFoundError를 함께 검사하는 것이 좋습니다. 여러 예외를 미리 확인해 두면 파일 열기에 실패하더라도 프로그램이 중단되지 않고 계속 실행될 수 있습니다.

finally 블록 활용하기

그렇다면 오류가 발생하든 발생하지 않든 항상 특정 메시지를 출력하고 싶다면 어떻게 해야 할까요? 이때 finally 블록이 등장합니다. finally 절을 정의하면 try…except 블록에서 오류가 발생했는지와 관계없이 finally 블록의 내용이 항상 실행됩니다.

finally 블록은 코드 실행이 완료되었음을 나타내는 유용한 지표가 됩니다. 다만 코드의 성공 여부를 구분하지 않기 때문에 else나 except만큼 자주 사용되지는 않습니다.

다음 예제를 살펴보겠습니다.

try:
    print(ourVariable)
except:
    print('ourVariable이 정의되지 않았습니다')
finally:
    print('코드 실행이 완료되었습니다.')

실행 결과는 다음과 같습니다.

ourVariable이 정의되지 않았습니다
코드 실행이 완료되었습니다.

ourVariable이 정의되어 있지 않아 예외가 발생했기 때문에 except 블록의 코드가 실행되었고, finally 절의 코드 역시 코드 실행이 끝났으므로 함께 실행된 것입니다.

else 블록 활용하기

else 절을 사용하면 예외가 발생하지 않았을 때 실행할 코드를 정의할 수 있습니다. 예를 들어 프로그램이 성공적으로 실행되었음을 사용자에게 알리는 용도로 활용할 수 있습니다.

게임 회원가입 시스템을 만든다고 가정해 보겠습니다. try…except…else 블록을 사용해 사용자가 선택한 아이디나 이메일 주소가 유효한지 검사할 수 있습니다. 유효하지 않으면 except 절이 실행되고, 유효하다면 else 블록이 실행되는 방식입니다.

다음은 간단한 예제입니다.

try:
    print('테스트')
except:
    print('문제가 발생했습니다.')
else:
    print('문제가 없습니다.')

실행 결과는 다음과 같습니다.

문제가 없습니다.

이 파이썬 프로그램은 예외를 만나지 못했기 때문에 else 문 안의 코드가 실행되며, 코드에 문제가 없다는 메시지를 출력합니다.

마무리

try…except 블록을 사용하면 파이썬 코드를 손쉽게 디버깅할 수 있습니다. 프로그램은 try 블록의 코드를 실행해 보고, 실패하면 except 블록이 실행됩니다. finally 문의 코드는 except 블록 실행 여부와 관계없이 항상 실행됩니다.

이 글에서는 try…except 블록의 사용법을 살펴보고, else와 finally를 활용해 예외 처리를 더욱 세밀하게 커스터마이징하는 방법도 알아보았습니다.

이러한 블록은 기존 코드를 테스트할 때뿐 아니라 새로운 코드를 작성할 때도 유용합니다. 프로그램이 오류 없이 올바르게 실행되도록 보장해 주기 때문입니다. 파이썬 학습을 이어가고 싶다면 체계적인 파이썬 학습 가이드를 참고해 보시기 바랍니다.