01_Python
49_예외처리
chuuvelop
2025. 1. 15. 00:46
728x90
01. 예외처리의 필요성
- 문제 발생으로 인해 프로그램이 비정상적으로 종료되는 것을 막고 발생한 문제에 대한 정보를 전달하기 위해 사용
try-except 문
- 예외처리를 위한 기본 구조
try:
...
except [발생오류[as 오류 메시지 변수]]:
...
- try 블록 실행 중 오류가 발생하면 except 블록이 실행됨
- try 블록에서 오류가 발생하지 않는다면 except 블록은 실행되지 않음
02. 예외처리 방법
- try, except만 쓰는 방법
- 발생 오류만 포함한 except문
- 발생 오류와 오류 메시지 변수까지 포함한 except문
# try, except만 쓰는 방법
try:
4 / 0
except:
print("error")
error
# 발생 오류만 포함한 except문
try:
4 / 0
except ZeroDivisionError:
print("zero division error")
except KeyError:
print("key_error")
zero division error
# 발생 오류와 오류 메시지 변수까지 포함한 except문
try:
4 / 0
except ZeroDivisionError as e:
print(e)
division by zero
4 / 0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Cell In[5], line 1
----> 1 4 / 0
ZeroDivisionError: division by zero
try:
a = int(input("나누어지는 수를 입력 : "))
b = int(input("나누는 수를 입력 : "))
print(f"{a} / {b} = {a / b}")
except ZeroDivisionError as e:
print(e)
print("0으로 나눌 수 없습니다.")
except ValueError as e:
print(e)
print("정수만 입력할 수 있습니다")
나누어지는 수를 입력 : 1.5
invalid literal for int() with base 10: '1.5'
정수만 입력할 수 있습니다
else, finally 문
try:
코드 작성 영역
except:
예외 발생 시 처리 영역
else:
예외가 없을 때 처리 영역
finally:
언제나 실행되는 영역
try:
a = int(input("나누어지는 수 : "))
b = int(input("나누는 수: "))
result = a / b
except Exception as e:
print(e)
else:
print(f"{a} / {b} = {result}")
finally:
print("프로그램을 종료")
나누어지는 수 : 1.5
invalid literal for int() with base 10: '1.5'
프로그램을 종료
try, except, finally 구문의 조합
- try 구문은 단독으로 사용할 수 없으며, 반드시 except구문 또는 finally 구문과 함께 사용해야 함
- else 구문은 반드시 except구문 뒤에 사용해야 함
- 가능한 조합
- try + except
- try + except + else
- try + except + finally
- try + except + else + finally
- try + finally
- 가능한 조합 외의 모든 조합은 구문 오류 발생
try:
input_a = int(input("정수 입력 : "))
print(input_a)
else:
print("프로그램이 정상적으로 종료")
Cell In[12], line 5
else:
^
SyntaxError: expected 'except' or 'finally' block
finally 활용
# 파일이 제대로 닫혔는지 확인하기
try:
f = open("info.txt", "w")
예외.발생
except:
print("오류가 발생했습니다")
finally:
f.close()
print("file.closed : ", f.closed)
오류가 발생했습니다
file.closed : True
# finally 구문을 사용하지 않고도 파일을 닫을 수 있음
try:
f = open("info.txt", "w")
예외.발생
except:
print("오류가 발생했습니다")
f.close()
print("file.closed : ", f.closed)
오류가 발생했습니다
file.closed : True
# try 구문 내부에서 return 키워드를 사용하는 경우
def test():
print("test 함수의 첫 줄")
try:
print("try 구문 실행")
return
print("try 구문의 return 키워드 뒤")
except:
print("except구문 실행")
else:
print("else구문 실행")
finally:
print("finally 구문 실행")
print("test 함수의 마지막 줄")
test()
test 함수의 첫 줄
try 구문 실행
finally 구문 실행
- try 구문 중간에 return 으로 탈출해도 finally 가 실행됨
- 함수 내부에서 파일 처리 코드를 깔끔하게 만들고 싶을 때 finally를 주로 활용
# 반복문과 finally를 사용하는 경우
print("프로그램 시작")
while True:
try:
print("try 구문 실행")
break
print("try 구문의 break 키워드 뒤")
except:
print("except 구문 실행")
finally:
print("finally 구문 실행")
print("while 반복문의 마지막 줄")
print("프로그램 종료")
프로그램 시작
try 구문 실행
finally 구문 실행
프로그램 종료
강제로 예외 발생시키기
try:
raise Exception("강제로 발생시킨 예외")
except Exception as e:
print("발생한 예외 메시지는")
print(e)
발생한 예외 메시지는
강제로 발생시킨 예외
raise Exception("강제로 발생시킨 예외")
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
Cell In[20], line 1
----> 1 raise Exception("강제로 발생시킨 예외")
Exception: 강제로 발생시킨 예외
오류의 종류
- 구문 오류(syntax error) : 프로그램 실행 전에 발생하는 오류
- 런타임 오류(runtime error) : 프로그램 실행 중에 발생하는 오류
구문 오류
- 괄호의 개수, 들여쓰기 문제 등으로 프로그램이 실행되기도 전에 발생하는 오류
- 프로그램이 실행조차 되지 않기 때문에 예외처리로는 처리할 수 없음
- 구문 오류가 발생한 코드를 수정해야함
# 프로그램 시작
print("프로그램 시작")
# 구문 오류 발생 코드
print("오류 발생"
Cell In[22], line 5
print("오류 발생"
^
SyntaxError: incomplete input
런타임 오류
- 프로그램 실행 중에 발생하는 오류
- 예외 라고 함
print("프로그램 시작")
list_a[1] # 예외 발생 코드
프로그램 시작
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[23], line 3
1 print("프로그램 시작")
----> 3 list_a[1]
NameError: name 'list_a' is not defined
조건문으로 예외 처리하기
# 숫자를 입력 받음
input_a = input("정수 입력: ")
# 숫자로 변환
number_input = int(input_a)
# 출력
print(number_input)
정수 입력: hello
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[25], line 5
2 input_a = input("정수 입력: ")
4 # 숫자로 변환
----> 5 number_input = int(input_a)
7 # 출력
8 print(number_input)
ValueError: invalid literal for int() with base 10: 'hello'
# 숫자를 입력 받음
input_a = input("정수 입력: ")
# 사용자의 입력이 숫자로만 구성되어 있을 때
if input_a.isdigit(): # isdigit() : 숫자로만 구성된 글자인지 확인
# 숫자로 변환
number_input = int(input_a)
# 출력
print(number_input)
else:
print("정수를 입력하지 않았습니다")
728x90