파이썬은 사용하기 쉽고 높은 생산성으로 인해 많은 사람들이 선호하는 프로그래밍 언어입니다. 하지만 모든 프로그램이 완벽하게 작동하는 것은 아닙니다. 때때로 프로그래머는 코딩 중에 예외 오류(exception error)를 마주하게 됩니다. 이번 포스팅에서는 파이썬 예외 오류에 대해서 상세하게 알아보도록 하겠습니다.
예외 오류란?
컴퓨터 프로그램이 실행 중에 예기치 않은 상황이 발생하여 정상적인 동작을 멈추는 상황을 말합니다. 이러한 상황을 예외라고 하고, 이 예외를 처리하기 위한 코드를 예외처리(exception handling) 코드라고 합니다.
파이썬 예외 처리 방법
- try-except 구문
예외 상황이 발생할 가능성이 있는 구문을 try 구문 내에 작성하고, 예외가 발생했을 때 실행할 코드를 except 구문 내에 작성합니다. 예외 종류를 지정하면 해당 종류의 예외가 발생할 때만 except 구문이 실행됩니다. 만약 예외 종류를 지정하지 않으면 모든 예외에 대해 except 구문이 실행됩니다.
python
try:
# 예외가 발생할 가능성이 있는 코드
except 예외종류 as 예외변수:
# 예외가 발생했을 때 실행할 코드
예시를 들어보겠습니다.
python
try:
result = 10 / 0 # ZeroDivisionError 발생
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다.', e)
위의 코드는 ZeroDivisionError라는 예외 종류를 처리하고, 해당 예외가 발생했을 때 ‘0으로 나눌 수 없습니다.’라는 메시지를 출력합니다.
- try-except-else 구문
try 구문 내에서 예외가 발생하지 않으면 except 구문이 실행되지 않고, 바로 else 구문이 실행됩니다.
python
try:
# 예외가 발생할 가능성이 있는 코드
except 예외종류 as 예외변수:
# 예외가 발생했을 때 실행할 코드
else:
# 예외가 발생하지 않았을 때 실행할 코드
예시를 들어보겠습니다.
python
try:
result = 10 / 2
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다.', e)
else:
print('결과는', result, '입니다.')
위의 코드는 ZeroDivisionError라는 예외 종류가 발생하지 않고, 정상적으로 result 변수에 값이 할당되면 else 구문이 실행되어 ‘결과는 5.0 입니다.’라는 메시지가 출력됩니다.
- try-except-finally 구문
finally 구문은 try 구문 내에서 예외가 발생 여부에 상관 없이 항상 실행됩니다.
python
try:
# 예외가 발생할 가능성이 있는 코드
except 예외종류 as 예외변수:
# 예외가 발생했을 때 실행할 코드
finally:
# 예외 발생 여부에 상관 없이 실행할 코드
예시를 들어보겠습니다.
python
try:
file = open('test.txt', 'r')
except FileNotFoundError as e:
print('파일을 찾을 수 없습니다.', e)
finally:
file.close()
print('파일을 닫았습니다.')
위의 코드는 test.txt 파일이 없을 때 FileNotFoundError가 발생하며, finally 구문이 실행되어 파일을 닫는 코드가 실행됩니다.
예외 처리 기본 내용
- 예외 발생 시 프로그램이 강제로 종료되는 것을 방지합니다.
- 예측하지 못한 예외 상황이 발생하여 프로그램이 정상적으로 작동하지 않더라도, 오류 메시지를 통해 사용자에게 메시지를 전달할 수 있습니다.
- 예외처리를 통해 프로그램의 안정성을 높일 수 있습니다.
- 예외 종류를 지정하여 해당 예외에 대한 처리를 할 수 있습니다.
예외 처리 사용자 정의
만약 파이썬에서 제공하는 예외 처리 기능으로는 원하는 결과를 얻기 어렵다면, 사용자가 직접 예외 처리 클래스를 정의하여 상황에 맞게 예외처리를 구현할 수도 있습니다. 사용자 정의 예외 클래스를 정의할 때는 Exception 클래스를 상속받아 작성합니다.
“`python
class MyException(Exception):
def init(self, message):
self.message = message
def __str__(self):
return self.message
try:
raise MyException(‘사용자 정의 예외입니다.’)
except MyException as e:
print(e)
“`
위의 코드는 MyException이라는 사용자 정의 예외 클래스를 정의하고, 예외를 발생시켜 해당 예외를 처리하는 코드입니다. 예외처리 클래스를 직접 정의하는 것은 강력한 예외 처리 방법 중 하나이지만, 언제나 사용되는 것은 아니며, 예외 코드의 가독성을 떨어뜨릴 수 있기 때문에 상황에 맞게 적절하게 사용해야 합니다.
마무리
이번 포스트에서는 파이썬에서의 예외 처리에 대해서 알아보았습니다. 예외처리는 프로그램 안정성을 높이기 위해 필수적인 요소이며, 프로그래밍에서 더욱 넓은 범위에서 사용됩니다. 다양한 예외처리 방식을 통해 안정성과 가독성을 높인 뛰어난 파이썬 코드를 만들어봅시다!