파이썬에서 예외처리(exception handling)는 프로그램 실행 중 발생할 수 있는 예외 상황을 감지하고 적절히 처리하는 메커니즘입니다. 예외는 실행 중에 발생하는 오류나 예기치 않은 상황을 나타내며, 이러한 예외를 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다. 파이썬의 예외처리에 대해 알아보고, try-except 문을 통한 예외 처리 방법을 다루겠습니다.
try-except 문
try-except 문은 예외가 발생할 수 있는 코드를 감싸고, 예외가 발생하면 해당 예외를 처리하는 코드 블록을 실행합니다. 예외가 발생하지 않으면 try 블록 안의 코드가 순차적으로 실행됩니다. 기본적인 try-except 문의 구조는 다음과 같습니다.
try:
# 예외가 발생할 수 있는 코드
except 예외종류 as 예외변수:
# 예외 처리 코드
예외가 발생하면 해당 예외와 일치하는 except 블록이 실행됩니다. 예외 종류를 지정하지 않으면 모든 예외에 대해 처리할 수 있습니다. as 키워드를 사용하여 예외 객체를 변수에 할당할 수 있습니다.
try:
x = 10 / 0
except ZeroDivisionError as e:
print("0으로 나눌 수 없습니다.")
print(e)
finally 절
finally 절은 try-except 문의 옵션으로, 예외 발생 여부와 상관없이 항상 실행되는 코드 블록입니다. 주로 리소스 정리 등의 마무리 작업을 수행하는데 사용됩니다.
try:
# 예외가 발생할 수 있는 코드
except 예외종류 as 예외변수:
# 예외 처리 코드
finally:
# 항상 실행되는 코드
file = open("data.txt", "r")
try:
# 파일 읽기 작업 수행
data = file.read()
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
finally:
file.close()
예외 발생과 raise
프로그램 실행 중에 개발자가 직접 예외를 발생시킬 수도 있습니다. raise 키워드를 사용하여 특정 예외를 강제로 발생시킬 수 있습니다.
def divide(x, y):
if y == 0:
raise ZeroDivisionError("0으로 나눌 수 없습니다.")
return x / y
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print(e)
사용자 정의 예외
파이썬에서는 사용자가 직접 예외 클래스를 정의하여 사용할 수도 있습니다. 사용자 정의 예외는 기본 예외 클래스인 Exception 클래스를 상속받아 만들 수 있습니다.
class MyException(Exception):
pass
try:
raise MyException("사용자 정의 예외 발생")
except MyException as e:
print(e)
else 절
try-except 문에는 else 절을 추가할 수도 있습니다. else 절은 예외가 발생하지 않았을 때 실행되는 코드 블록입니다.
try:
# 예외가 발생할 수 있는 코드
except 예외종류 as 예외변수:
# 예외 처리 코드
else:
# 예외가 발생하지 않았을 때 실행되는 코드
try 블록의 코드가 예외 없이 실행되면 else 블록이 실행됩니다. 이를 활용하여 예외 발생 여부에 따라 다른 동작을 수행할 수 있습니다.
결론
파이썬의 예외처리에 대해 알아보았습니다. 예외처리는 프로그램의 안정성을 높이고 예외 상황에 대한 적절한 대응을 할 수 있도록 도와줍니다. try-except 문을 통해 예외를 처리하고, finally 절을 사용하여 마무리 작업을 수행할 수 있습니다. 또한, 사용자 정의 예외를 만들어 특정 상황에 대한 예외를 발생시킬 수 있습니다. 예외처리를 적절히 활용하여 안정적이고 견고한 프로그램을 작성해보세요.
'IT > python' 카테고리의 다른 글
파이썬 dir 함수 (0) | 2023.06.04 |
---|---|
파이썬 matplotlib 패키지 (0) | 2023.06.03 |
파이썬 클래스(class) (0) | 2023.06.02 |
파이썬 glob 모듈 (0) | 2023.06.02 |
파이썬 pickle 모듈 (0) | 2023.06.01 |
댓글