파이썬에서 ZeroDivisionError, IndexError, ValueError 등의 에러를 예시를 예시와 함께 try-except 구문으로 예외 처리하는 방법에 대해 알아보도록 하겠습니다.

파이썬 에러(또는 예외) 처리 ?

프로그래밍에서 에러(또는 예외)는 프로그램 실행 중 다양한 상황에서 발생될 수 있습니다.
이러한 예외를 간단하게 처리하여 프로그램이 갑작스럽게 중단되지 않도록 구현하는 방법에 대해 알아보도록 하겠습니다.

try-except 구문

'try-except' 구문은 파이썬에서 예외 처리를 위해 사용되는 구문입니다.
'try' 블록에서 에러가 발생하면 'except' 블록의 코드가 실행되는 구조로 코드를 작성하여 사용합니다.

기본 구조

try:
	실행할 코드
except:
	예외가 발생할 때 실행할 코드

 

예시

try:
	a = 10 / 0
except ZeroDivisionError:
	print("0으로 나눌 수 없습니다!")

만약 여러 개의 'except' 블록을 추가하거나 'else', 'finally' 블록을 활용하여 예외 처리 로직을 더욱 세분화 할 수 있습니다.

일반적인 파이썬 에러 처리 예시

1. ZeroDivisionError

0으로 숫자를 나눌 때 발생하는 에러입니다.

예외 처리 없이 실행한 예시

num = 10 / 0 # ZeroDivisionError 발생

예외 처리한 예시

try:
	num = 10 / 0
except ZeroDivisionError:
	print("0으로 나눌 수 없습니다!")

 

2. IndexError

리스트나 튜플에서 잘못된 인덱스에 접근하려 할 때 발생하는 에러

예외 처리 없이 실행한 예시

a = [1, 2, 3]
a[4]  # IndexError 발생

예외 처리한 예시

try:
	a = [1, 2, 3]
    print(a[4])
except IndexError:
	print("잘못된 인덱스입니다. 인덱스 범위 내에 있는지 확인하세요.")

 

3. KeyError

딕셔너리에서 존재하지 않는 키에 접근하려 할 때 발생합니다.

예외 처리 없이 실행한 예시

data = {'apple': 5000, 'banana': 4000}
print(data['tomato']) # KeyError 발생

예외 처리한 예시

try:
	data = {'apple': 5000, 'banana': 4000}
    print(data['tomato'])
except KeyError:
	print("키가 존재하지 않습니다! 딕셔너리에 키가 있는지 확인하세요.")

 

4. FileNotFoundError

존재하지 않는 파일을 열려고 할 때 발생하는 에러입니다.

예외 처리 없이 실행한 예시

f = open('data.csv') # File이 없을 경우 FileNotFoundError 발생

예외 처리한 예시

try:
	f = open('data.csv')
except FileNotFoundError:
	print("파일을 찾을 수 없습니다. 파일 경로가 올바른지 확인하세요.")

 

실용적인 상황에서의 예외 처리 예시

예를 들어 표현된 숫자들을 실수로 변환해야 하는 상황을 가정하도록 하겟습니다. 그러나 일부 문자열이 빈 문자열일 경우 ValueError가 발생합니다.

예외 처리 없이 실행한 문제 코드 예시

data_list = ['10', '20', 'invalid', '']
for value in data_list:
	result = int(value) # ValueError 발생
    print(result)

예외 처리한 해결 코드 예시

data_list = ['10', '20', 'invalid', '']
for value in data_list:
	try:
    	result = int(value)
    except ValueError:
    	result = 0 # 변환 실패 시 기본값 0 으로 설정
  	print(result)

 

여러 종류의 예외 처리

다양한 종류의 예외를 처리하려면 각 예외에 대해 별도의 except 블록을 사용할 수 있습니다.

예시

data_list = [10, '20', 'invalid', None, '']
for value in data_list:
	try:
    	result = int(value)
    except ValueError:
    	print(f'ValueError: {value}를 정수로 변환할 수 없습니다. 기본값 0으로 설정합니다.')
      	result = 0
    except TypeError:
    	print(f'TypeError: {value}의 타입이 잘못되었습니다. 기본값 0으로 설정합니다.')
        result = 0
   	print(result)

'else' 및 'finally' 블록 사용하기

  • 'else': 예외가 발생하지 않을 때만 실행됩니다.
  • 'finally': 예외 발생 여부와 관계없이 항상 실행됩니다.

예시

file_path = 'example.txt'

try:
	file = open(file_path, 'w')
   	file.write('파이썬 예외 처리 예시')
except IOError:
	print(f"파일 '{file_path}'을 열 수 없습니다.")
else:
	print(f"파일 '{file_path}'에 데이터 쓰기 성공!")
finally:
	print(f"'{file_path}' 처리가 완료되었습니다.")
    file.close()

 

예외 처리 코드 작성 시 주의 사항

  • 특정 예외를 명시적으로 처리하기 : 광범위한 'except:' 구문은 피하고, 특정 예외에 대해 명확하게 처리할 수 있도록 합니다.
  • 'finally' 로 정리 작업 수행하기 : 파일이나 데이터베이스 연결과 같은 리소스를 관리할 때 'finally' 블록에서 항상 정리 작업을 수행합니다.
  • 친절한 메시지 출력하기 : 예외를 처리할 때 사용자에게 명확하고 도움이 되는 메시지를 작성하여 제공하도록 합니다.