파이썬에서의 오류 처리

파이썬에서의 오류 처리

이 기사에서는 파이썬에서의 오류 처리에 대해 설명합니다.

YouTube Video

파이썬에서의 오류 처리

파이썬에서의 오류 처리는 주로 try, except, else, finally 키워드를 사용하여 이루어집니다. 이 구조를 사용하면 프로그램에서 오류가 발생했을 때 적절하게 대응할 수 있습니다. 아래에서는 각각을 사용하는 방법에 대해 설명하겠습니다.

try 블록

try 블록 안에는 실행하고자 하는 코드를 작성합니다. 이 블록 안에서 오류가 발생하면 프로그램 실행은 즉시 except 블록으로 전환됩니다.

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • try 블록에서 오류를 감지하고 ValueError 또는 ZeroDivisionError를 잡아서 적절하게 처리하는 예시입니다.

except 블록

except 블록 안에는 특정 예외(오류)가 발생했을 때 실행될 코드를 작성합니다. 발생하는 예외의 유형에 따라 특정 예외를 처리할 수도 있습니다.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • 이 코드는 try 블록에서 오류가 발생했을 때 except 블록에서 각 예외 타입에 따라 다르게 처리하는 예시입니다.

여러 예외를 함께 처리하기

여러 예외 클래스가 동일한 처리 로직을 공유할 수 있는 경우 튜플을 지정하십시오.

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • IndexErrorZeroDivisionError를 함께 잡아서 동일한 방식으로 예외를 처리하는 예시입니다.

예외를 조건 없이 잡기

모든 유형의 예외를 한 블록에서 처리하고 싶다면 except의 인수를 생략하십시오.

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • 하지만 모든 예외를 무조건적으로 잡는 것보다 특정 예외만 처리하는 것이 버그를 찾고 디버깅하는 데 더 도움이 됩니다. 가능하다면 ValueErrorTypeError와 같이 예측 가능한 예외만 명시적으로 처리하는 것이 코드의 견고함을 높여줍니다.

else 블록

else 블록은 try 블록 내에서 오류가 발생하지 않는 경우에만 실행됩니다.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • 이 코드는 try 블록에서 오류가 발생하지 않았을 때만 else 블록이 실행되는 예시입니다.

finally 블록

finally 블록은 try 블록에서 오류가 발생했는지 여부와 상관없이 항상 마지막에 실행될 코드를 작성할 때 사용됩니다. 리소스를 해제하거나 정리 작업을 수행하는 데 유용합니다.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • 이 코드는 예외의 발생 여부와 관계없이 finally 블록이 항상 실행된다는 것을 보여주는 예시입니다.

raise 키워드

기존 코드에서 특정 조건이 충족되지 않을 경우 raise 키워드를 사용하여 예외를 발생시키는 것도 가능합니다.

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • 이 코드는 조건이 충족되지 않을 때 raise 키워드를 사용해 명시적으로 예외를 발생시키는 예시입니다.

결론

이와 같은 방식으로 오류를 처리하면 프로그램 충돌을 방지하고 사용자에게 적절한 메시지를 표시하며 후속 프로그램 처리를 계속할 수 있습니다.

위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video