파이썬에서의 오류 처리
이 기사에서는 파이썬에서의 오류 처리에 대해 설명합니다.
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}")IndexError와ZeroDivisionError를 함께 잡아서 동일한 방식으로 예외를 처리하는 예시입니다.
예외를 조건 없이 잡기
모든 유형의 예외를 한 블록에서 처리하고 싶다면 except의 인수를 생략하십시오.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")- 하지만 모든 예외를 무조건적으로 잡는 것보다 특정 예외만 처리하는 것이 버그를 찾고 디버깅하는 데 더 도움이 됩니다. 가능하다면
ValueError나TypeError와 같이 예측 가능한 예외만 명시적으로 처리하는 것이 코드의 견고함을 높여줍니다.
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를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.