try-except 구문을 사용하는 풀이가 있었다.try-except 구문이 있다는 것은 알지만 잘 사용해본 적은 없어 내용을 찾아 정리해보았다. 아래는 GPT를 이용하여 정리한 내용이다.
try-except의 사용 방법def main():
"""
[1] 기본 예외 처리
- 사용자가 숫자를 입력하지 않거나 0을 입력하면 예외를 처리함.
"""
try:
num = int(input("숫자를 입력하세요: ")) # ValueError 가능성
print(10 / num) # ZeroDivisionError 가능성
except ValueError:
print("유효한 숫자를 입력하세요.") # 숫자가 아닌 값 입력 시
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.") # 0 입력 시
"""
[2] 여러 개의 예외를 한 번에 처리
- ValueError 또는 ZeroDivisionError 발생 시 동일한 방식으로 처리함.
"""
try:
num = int(input("숫자를 입력하세요: "))
print(10 / num)
except (ValueError, ZeroDivisionError) as e:
print(f"오류 발생: {e}") # 예외 메시지를 출력함.
"""
[3] 모든 예외 처리 (비추천)
- Exception을 사용하면 모든 예외를 처리할 수 있지만,
어떤 오류가 발생했는지 명확하지 않으므로 가급적 특정 예외를 처리하는 것이 좋음.
"""
try:
num = int(input("숫자를 입력하세요: "))
print(10 / num)
except Exception as e:
print(f"예외 발생: {e}") # 예외 메시지를 출력
"""
[4] else와 finally 사용
- else: 예외가 발생하지 않았을 경우 실행됨.
- finally: 예외 발생 여부와 관계없이 무조건 실행됨.
"""
try:
num = int(input("숫자를 입력하세요: "))
result = 10 / num
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("숫자를 입력하세요.")
else:
print(f"결과: {result}") # 예외가 발생하지 않은 경우 실행
finally:
print("프로그램 종료") # 항상 실행됨 (예외 여부와 관계없이)
"""
[5] 사용자 정의 예외 발생
- 특정 조건에서 강제로 예외를 발생시키고, 유효한 입력을 받을 때까지 반복 실행
"""
while True:
try:
num = int(input("양수를 입력하세요: "))
if num < 0:
raise ValueError("음수는 입력할 수 없습니다.") # 사용자 정의 예외 발생
break # 정상 입력이면 루프 종료
except ValueError as e:
print(f"오류 발생: {e}. 다시 입력하세요.") # 에러 메시지 출력 후 다시 입력 요청
"""
[6] 파일 처리와 예외 처리
- 존재하지 않는 파일을 열려고 할 경우 FileNotFoundError 예외가 발생할 수 있음.
- with open()을 사용하면 자동으로 파일이 닫히므로 finally에서 close()를 호출할 필요 없음.
"""
try:
with open("data.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
"""
[7] except: (모든 예외를 잡지만 비추천)
- 어떤 오류든 잡아버리므로 디버깅이 어렵고, 중요한 예외도 무조건 처리됨.
"""
try:
num = int(input("숫자를 입력하세요: "))
print(10 / num)
except:
print("오류 발생!") # 어떤 오류든 무조건 처리됨 (비추천)
"""
[8] except Exception: ([7]보다는 낫지만 [9]가 더 좋음)
- 모든 예외를 잡지만, KeyboardInterrupt, SystemExit 같은 중요한 예외는 제외됨.
"""
try:
num = int(input("숫자를 입력하세요: "))
print(10 / num)
except Exception as e:
print(f"오류 발생: {e}") # 예외 메시지를 출력하여 디버깅 가능
"""
[9] 특정 예외를 명시적으로 처리 (가장 추천)
- 예상 가능한 예외는 따로 처리하여 문제 원인을 명확하게 구분할 수 있음.
"""
try:
num = int(input("숫자를 입력하세요: "))
print(10 / num)
except ValueError:
print("유효한 숫자를 입력하세요.") # 숫자가 아닌 값을 입력했을 때
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.") # 0을 입력했을 때
except Exception as e:
print(f"예기치 않은 오류 발생: {e}") # 예외 메시지를 출력하여 예기치 않은 오류도 대비 가능
if __name__ == "__main__":
main()
| 예외명 | 설명 |
|---|---|
Exception | 모든 예외의 기본 클래스 |
SyntaxError | 문법 오류 발생 시 (예: print(1 2)) |
IndentationError | 들여쓰기 오류 발생 |
TypeError | 잘못된 타입 사용 (예: "3" + 3) |
ValueError | 잘못된 값 사용 (예: int("abc")) |
IndexError | 리스트, 튜플, 문자열의 잘못된 인덱스 접근 |
KeyError | 딕셔너리에 존재하지 않는 키 접근 |
ZeroDivisionError | 0으로 나누기 시도 |
FileNotFoundError | 존재하지 않는 파일 열기 시도 |
IOError | 파일 입출력 오류 |
AttributeError | 존재하지 않는 속성 접근 |
NameError | 정의되지 않은 변수 사용 |
ModuleNotFoundError | 존재하지 않는 모듈 import |
MemoryError | 메모리 부족 |
OverflowError | 너무 큰 수 연산 시 발생 |
RecursionError | 재귀 호출이 너무 깊어질 때 발생 |