파이썬 기초 – 16장. 파이썬 예외처리 (try-except)

안녕하세요. 오늘은 “파이썬 예외처리”에 대해 포스팅 하도록 하겠습니다.

내가 만든 프로그램이 오류 없이 원하는데로 동작하면 좋겠지만, 항상 예외 상황은 발생 합니다. 예를 들어, 파일을 열다가 파일이 없거나, 사용자로부터 입력 받을 때 잘못된 값이 입력되는 경우 등이 그렇죠. 이러한 예외 상황을 고려하여 사전에 무언가를 처리해 놓지 않았다면 프로그램은 비정상적으로 종료 됩니다.

하지만 걱정하지 마세요! 파이썬은 간단한 문법으로 강력한 기능을 발휘하는 예외처리 구문을 제공하고 있습니다. 예외처리를 통해 프로그램의 안정성을 높일 수 있고, 오류에 대한 적절한 대응을 할 수 있습니다. 오늘 포스팅에서는 파이썬 예외처리의 기본 개념부터 다양한 예외 처리 방법까지 살펴보겠습니다.

포스팅에 사용한 예제 중에서 파일 입출력에 관한 내용이 있는데, 이 부분을 공부하지 않은 분은 지난 포스팅을 참고하시기 바랍니다.

파이썬 기초 – 14장. 파이썬 표준 입출력, 파일 입출력

1. 파이썬 예외처리?

예외처리는 내가 만든 코드에서 발생할 수 있는 예외 상황에 대비하는 것입니다. 예외란 프로그램이 예상하지 못한 상황에서 발생하는 오류를 말합니다. 이러한 예외 상황에서 우리는 프로그램을 제어하고, 비정상 종료를 막기 위해 예외 처리를 해야 합니다.

예를 들어, 어떤 함수에서 값을 나눌 때 0으로 나누게 되면 ZeroDivisionError라는 예외가 발생합니다. 이때 우리는 프로그램이 강제 종료되지 않도록 예외 처리를 해야 합니다. 이를 위해서는 우선 내가 짜 놓은 코드에서 어떠한 오류 가 발생할 수 있는지, 다양한 측면에서의 고민이 필요합니다.

2. 예외처리의 중요성과 필요성

어떤 프로그램이던 예외 상황은 항상 발생할 수 있습니다. 만약 이러한 예외 상황을 무시하거나 적절하게 처리하지 않는다면, 프로그램은 비정상적으로 종료되거나 원치 않은 동작을 수행 합니다. 이는 사용자 경험을 저하시키고, 프로그램의 신뢰성과 안정성을 떨어뜨릴 수 있습니다.

파이썬에서는 try-except-else-finally 구문을 통해 예외처리를 할 수 있습니다. 아래의 예시를 보겠습니다.

아래코드에서 try구문이 실행 되며, FileNotFoundError가 발생할경우 except문이 실행 됩니다. 만약 해당 에러가 없다면 else 구문이 실행되며, 오류와 상관없이 finally구문 실행 되게 됩니다.

try:
    file = open("non_existent_file.txt", "r")
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
else:
    try:
        content = file.read()
    except:
        print("파일을 읽을 수 없습니다.")
    else:
        print("파일 내용:")
        print(content)
    finally:
        file.close()
finally:
    print("예외 처리 완료.")

3. try-except 구문과 기본 예외 처리

try-except 구문은 파이썬에서 예외처리를 위해 사용되는 기본적인 문법입니다. 이 구문을 사용하면 예외 상황이 발생할 수 있는 코드를 감싸고, 예외가 발생했을 때 적절한 대응을 할 수 있습니다.

try 블록에는 예외가 발생할 수 있는 코드를 작성하고, except 블록에는 해당 예외가 발생했을 때 실행할 코드를 작성합니다. 이 때 except 블록은 예외 유형에 따라 여러 개로 나눌 수도 있으며, 여러 예외 유형을 한 번에 처리할 수도 있습니다.

예를 들어, 다음은 FileNotFoundError 및 ValueError 두 가지 예외를 처리하는 코드입니다.

try: # 파일 열기 
    file = open("my_file.txt", "r") # 파일에서 숫자 읽기 
    number = int(file.readline()) # 숫자 출력 
    print("숫자:", number)
except FileNotFoundError: 
    print("파일을 찾을 수 없습니다.")
except ValueError: 
    print("잘못된 값을 입력했습니다.")

이 코드는 파일을 열고 첫 번째 줄에 있는 숫자를 읽어와 출력합니다. 그러나 파일이 없거나 읽은 값을 정수로 변환할 수 없는 경우에는 해당 예외를 처리하고 적절한 메시지를 출력합니다.

try-except 구문은 파이썬 예외처리의 기본이며, 프로그램에서 가장 많이 사용되는 방법입니다. 그러나 기본 예외 처리 외에도 다양한 예외 처리 방법과 활용에 대해 알아보겠습니다.

4. 다양한 예외 처리 방법과 활용

파이썬은 try-except 구문 외에도 다양한 예외 처리 방법과 활용을 제공합니다. 이를 통해 우리는 더욱 세밀하고 유연한 예외 처리를 수행할 수 있습니다.

첫 번째로, except 블록에 예외 객체를 사용하여 예외 정보를 확인할 수 있습니다. 이를 통해 예외가 발생한 원인을 파악하고 적절한 대응을 할 수 있습니다. 예를 들어, 다음은 IndexError 예외를 처리하며, 예외 객체를 사용하여 예외 정보를 출력하는 코드입니다.

numbers = [1, 2, 3]

try: 
    print(numbers[3])
except IndexError as e: 
    print("리스트 인덱스가 범위를 벗어났습니다,", e)

이 코드는 numbers 리스트에서 존재하지 않는 인덱스에 접근하려고 할 때 발생하는 IndexError 예외를 처리합니다. except 블록에서는 예외 객체를 변수 e에 할당하고, 이를 사용하여 “리스트 인덱스가 범위를 벗어났습니다”라는 메시지를 출력합니다.

두 번째로, 여러 예외를 한 번에 처리할 수도 있습니다. except 블록에 여러 예외를 나열하고, 예외 유형들을 튜플로 묶어 처리할 수 있습니다. 이를 통해 코드의 가독성을 높이고 중복을 줄일 수 있습니다.

마지막으로, 위의 첫번째 예제처럼 else와 finally 구문을 활용할 수도 있습니다. else 블록은 예외가 발생하지 않았을 때 실행되는 코드를 작성할 수 있고, finally 블록은 예외 발생 여부에 상관없이 항상 실행되는 코드를 작성할 수 있습니다.

이렇게 다양한 예외 처리 방법과 활용을 통해 우리는 좀 더 유연하고 효과적인 예외 처리를 수행할 수 있습니다.

5. 예외 처리 시 고려해야 할 점들

예외 처리를 수행할 때에는 몇 가지 고려해야 할 점들이 있습니다.

첫 번째로, 예외 처리의 범위를 명확하게 지정해야 합니다. 예외 처리는 가능한 한 예외가 발생할 수 있는 범위를 좁게 설정하는 것이 좋습니다. 이를 통해 예외를 정확하게 처리하고, 의도하지 않은 예외까지 처리하는 것을 방지할 수 있습니다.

두 번째로, 예외 처리 시 예외를 무시하거나 적절한 메시지를 제공해야 합니다. 예외를 무시하면 문제가 숨겨지거나 프로그램의 이상 동작을 유발할 수 있으므로 주의가 필요합니다. 또한, 사용자가 이해할 수 있는 명확하고 유용한 메시지를 제공하여 오류 해결을 돕는 것이 중요합니다.

세 번째로, 예외 처리 후에는 적절한 조치를 취해야 합니다. 예외가 발생하면 이를 무시하는 것보다는 예외 상황에 알맞은 조치를 취해야 합니다. 예외 처리 코드 내에서 적절한 복구 작업을 수행하거나, 프로그램을 안전하게 종료하는 등의 조치를 취할 필요가 있습니다.

마지막으로, 오랜 시간이 지난 예외 처리 코드는 검토하고 개선해야 합니다. 프로그램의 요구사항이나 상황이 변경되면 예외 처리 코드는 업데이트되어야 할 수도 있습니다. 그렇기 때문에 정기적으로 예외 처리 코드를 검토하고, 필요한 수정을 진행하는 것이 좋습니다.

이렇게 예외 처리 시 고려해야 할 점들을 염두에 두고 코딩을 하여 오류없는 프로그램을 개발해 보시기 바랍니다.

감사합니다. “끝”

Leave a Comment