파이썬에서 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' 블록에서 항상 정리 작업을 수행합니다.
- 친절한 메시지 출력하기 : 예외를 처리할 때 사용자에게 명확하고 도움이 되는 메시지를 작성하여 제공하도록 합니다.
'Programming > Python' 카테고리의 다른 글
[Python] 파이썬에서 MySQL을 다룰 수 있는 PyMySQL 라이브러리 사용하기 (0) | 2024.05.20 |
---|---|
[Python] 파이썬을 사용한 웹 크롤링(웹 스크래핑) (requests, bs4, find, CSS Selector) (1) | 2024.05.10 |
[Python] 파이썬 For 문을 사용한 반복문 및 제어문 익히기(for, break, continue, pass) (0) | 2024.04.27 |
[Python] 파이썬 조건문 익히기(if-elif-else) (0) | 2024.04.27 |
[Python] 파이썬에서 사용되는 자료 구조(딕셔너리/사전) (0) | 2024.04.23 |