본문 바로가기
Programming/Python

[Python] 예외 처리 (try, exept, else, finally)

by BTC_One 2023. 8. 21.

안녕하세요~

1-Tier 팀의 One입니다

 

태풍이 지나가고 또 좋은 날이 왔네요

오늘은 Python의 예외처리에 대해서 알아봅시다!

 

오류가 발생했을 때 파이썬은 프로그램을 중단하고, 오류 메시지를 보여줍니다.

유연한 프로그래밍을 위해선 오류를 처리해야겠죠?! 그러기 위해선 예외처리를 사용합니다. 

 

예외처리?

프로그램 실행 중 발생할 수 있는 오류나 예외 상황에 대응하기 위한 파이썬의 매커니즘

 

예외 처리를 통해 오류에 대응하는 코드를 작성하여, 예외 상황에서 프로그램이 비정상적으로

종료되지 않도록 할 수 있습니다. 

 

예외처리는 코드의 안정성과 신뢰성을 향상 시키는데 도움이 되겠죠?! 

 

그럼 파이썬의 예외 처리 방법에 대해 자세히 알아봅시다.

 

try-except

파이썬에서 예외처리는 try-except 문을 사용하여 수행합니다. 

 

  • try : 예외가 발생 할 가능성이 있는 코드를 작성
  • except : 발생한 예외에 대한 처리를 작성
try:
	#예외가 발생 할 가능성이 있는 코드
except:
	#예외가 발생했을 때 실행 될 코드

예를 들어서, 다음과 같이 0으로 나누는 경우에 대해 예외 처리를 할 수 있습니다.

try:
	result = 10/0
except ZeroDivisionError as e:
	print("0으로 나눌 수 없습니다:", e)

try 블록에 있는 연산에서 예외가 발생하면, except 블록으로 제어가 이동하게 됩니다.

그리고나서 except 블록에서는 예외에 대한 처리를 실행합니다.

 

예외 처리 종류는 Python에 내장된 예외 클래스들에 의해 정의되는데,

몇 가지 일반적인 내장 예외 클래스에 대해서 알아볼까요?

클래스 설명
Exception 기본 클래스
TypeError 잘못된 형식으로 연산이나 함수를 호출할 때 발생
ValueError 올바른 형식을 가진 값이 아닌 경우 발생
NameError 정의되지 않은 변수를 사용하려고 할 때 발생
ZeroDivisionError 0으로 나누기 연산을 수행하려고 할 때 발생
FileNotFoundError 파일을 찾을 수 없을 때 발생
IndexError 인덱스 범위를 벗어난 원소에 접근하려고 할 때 발생
KeyError 사전에서 존재하지 않는 키를 사용하려고 할 때 발생
AssertionError assert문이 실패할 때 발생
IOError 입출력 작업 중 오류가 발생했을 때 발생
AttributeError 객체가 속성이나 메서드를 갖고 있지 않을 때 발생
ImportError 모듈을 가져올 수 없거나 잘못된 모듈을 가져왔을 때 발생
KeyboardInterrupt 사용자가 프로그램 실행을 중지시키는 키 인터럽트를 입력했을 때 발생

이 외에도 많은 내장 클래스가 있으며, 필요에 따라 사용자 정의 예외 클래스를 만들어 사용이 가능합니다😉

 

사용자 정의 예외 처리

바로 위에서 사용자 정의 예외 클래스를 만들어 사용이 가능하다고 했는데요, 어떻게 만들 수 있을까요?

방법은 다음과 같습니다.

1. 예외 클래스를 정의하고, 필요한 속성과 메서드를 추가
2. 기존의 내장 예외 클래스 중 하나를 상속받아 사용자 정의 예외 클래스를 만듦
3. 필요에 따라 추가적인 메서드를 정의하거나 상속받은 메서드를 재정의

그럼 간단하게 하나를 같이 만들어볼까요?!

class DatabaseConnectionError(Exception):
	def __init__(self, message):
    	self.message = message
	def __str__(self):
    	return f"Database Connection Error: {self.message}"

위 예제는 DatabaseConnectionError 라는 예외 클래스를 정의합니다.

Exception 클래스를 상속받아 만들어집니다. 

 

위 예제를 통해서 데이터베이스 연결 과정에서 발생하는 오류를 처리할 수 있습니다.

try:
	#데이터베이스 연결 시도
    connect_to_database()
except DatabaseConnectionError as e:
	print(e)

만약 데이터베이스 연결 과정에서 오류가 발생하면, 정의해둔 예외가 발생하게되고

오류 메시지를 출력한 후 오류 처리 로직을 수행할 수 있습니다

 

자주 발생할 것 같은 오류는 사용자 정의 예외처리 클래스를 생성하여

유연하게 오류에 대응할 수 있을 것 같습니다. 

 

try-except-else-finally

사실 파이썬의 예외처리는 2가지가 더 있는데요

모든 예외 처리를 사용 할 필요는 없으며, 상황에 맞게 적절하게 사용해주면 될 것 같습니다 ㅎㅎ

 

다음은 4가지 예외 처리의 사용법입니다.

try:
	#예외가 발생 할 가능성이 있는 코드
except:
	#예외가 발생했을 때 실행 될 코드
else:
	#예외가 발생하지 않았을 때 실행 될 코드 
finally:
	#항상 실행되는 코드

try 블록의 코드가 정상적으로 실행되는 경우 else 블록이 실행되고,

예외가 발생하면 except 블록의 코드가 실행됩니다.

 

finally 블록은 예외 발생 여부에 상관없이 항상 실행되는 코드로, 

예외 처리 이후에 정리 작업을 수행하는 데에 사용될 수 있습니다.

 

다음은 try-except-else-finally 문을 사용한 예제입니다.

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

위 예제는 try 블록에서 파일을 열려고 시도하고, 파일이 없는 경우에는 FileNotFoundError 예외가 발생합니다.

만약 파일이 정상적으로 열리는 경우에는, else 블록에서 파일 내용을 읽고 출력을 합니다.

마지막으로 finally 블록에서는 예외 처리가 완료되었음을 알리는 메시지를 출력합니다. 

 

자 이렇게 파이썬 예외 처리에 대해서 알아봤습니다

예외 처리는 발생한 예외를 유연하게 처리하여 코드의 안정성과 신뢰성을 향상시키는데 도움이 됩니다.

모두모두 적극적으로 활용해보는게 좋을 것 같습니다. 

 

그럼 다음 시간에 또 만나요 베바👋

댓글