1. 에러의 종류
Syntax Error: 파이썬 문법의 오류
Name Error: 변수 이름의 오류
Index Error: 리스트나 튜플의 인덱스 오류
Attribute Error: 클래스의 멤버함수/ 멤버변수의 오류
FileNotFoundError: 파일/폴더의 오류 (ex 파일이나 폴더가 없는 경우
Value Error: 잘못된 변수의 오류 ex) int("Hello")
ImportError: 라이브러리/패키지 불러오기 오류
등 ...
2. try-except 구문
try-except: 우선적으로 try 구문을 실행하고 try구문에서 에러가 발생하면 except를 실행한다.
def division(a, b):
try:
return a/b
except:
return '예외가 발생했습니다'
print(division(5, 0)) # 출력: 예외가 발생했습니다.
print(division(5, 2)) # 출력: 2.5
b = 0이면 0으로 나눌 수 없는 ZeroDivisionError를 발생시키는 코드이며 에러가 발생하면 except구문이 실행된다.
추가로 다음의 코드처럼 구체적으로 어떤 error가 나오는지 표시해서 error의 원인을 볼 수 있다.
def division(a, b):
try:
return a/b
except ZeroDivisionError:
return '0으로 나눌 수 없습니다'
print(division(5, 0)) # 출력: 0으로 나눌 수 없습니다
print(division(5, 2)) # 출력: 2.5
as: 예외 처리에서 발생한 오류를 특정 이름으로 참조할 수 있게 해주는 키워드
def division(a, b):
try:
return a/b
except ZeroDivisionError as error:
return f'0으로 나눌 수 없습니다 {error}'
print(division(5, 0)) # 출력: 0으로 나눌 수 없습니다 division by zero
print(division(5, 2)) # 출력: 2.5
예를 들어 except ZeroDivisionError as error에서 ZeroDivisionError가 발생하면 그 오류를 error라는 이름으로 사용할 수 있게 된다.
error는 ZeroDivisionError의 인스턴스로 그 안에는 오류와 관련된 메세지가 들어있다.
ZeroDivisionError의 경우 "division by zero"라는 메세지를 포함한다.
*파이썬의 에러메세지는 기본적으로 상속구조를 가지고 있다.
맨위에 Exception -...-ZeroDivisionError, TypeError, ..., ValueError
3. else-finally 구문
try-except구문에서 else를 사용하면: 오류가 없을때만 실행
try-except구문에서 finally를 사용하면: 오류가 있던 없던 무조건 실행
구문에서 반드시 else 다음에 finally를 정의해야 한다.(순서 주의)
def division(a, b):
try:
print(a/b)
except ZeroDivisionError:
print(f'0으로 나눌 수 없습니다')
except TypeError:
print(f'타입을 확인하세요')
else:
print('else 오류가 없을 때만 실행')
finally:
print('finally 오류가 있던 없던 실행')
division(5, 2) #출력: 2.5, else 오류가 없을 때만 실행, finally 오류가 있던 없던 실행
division(5, 0) #출력: 0으로 나눌 수 없습니다, finally 오류가 있던 없던 실행
division('5', 2) #출력: 타입을 확인하세요, finally 오류가 있던 없던 실행
4. 에러를 강제로 발생시키기
에러를 강제로 발생시키는 이유
● 유효성 검사: 함수의 입력값이 예상한 형식이 아닐 경우 강제로 예외를 발생시켜 잘못된 입력에 대한 처리를 할 수 있습니다.
● 디버깅: 특정 코드 경로에 도달하지 않도록 하려는 경우 예외를 발생시켜 프로그램의 흐름을 중단하고 문제를 확인할 수 있습니다.
● 조건부 예외 발생: 특정 조건이 충족될 때 예외를 발생시켜 문제를 명확하게 표시하는 경우입니다.
● API 통신: 외부 API 호출 시 예외를 명시적으로 발생시켜 API의 오류를 다룰 때 사용합니다.
raise: 에러를 강제로 발생시키는 문법
def add(a, b):
try:
if a==3:
raise ZeroDivisionError
print(a+b)
except ZeroDivisionError:
print(f'0으로 나눌 수 없습니다')
add(3, 5) # 출력: 0으로 나눌 수 없습니다
raise Exception(다른 에러도 가능)을 사용하면 커스텀 에러 메세지를 출력할 수 있다.
def add(a, b):
try:
if a==3:
raise Exception('내 마음대로 에러 메세지')
print(a+b)
except Exception as error:
print(f'정말, {error}')
add(3, 5) # 출력: 정말, 내 마음대로 에러 메세지
다음과 같이 a == 3의 조건이 참일 경우 raise Exception("내 마음대로 에러 메세지")를 사용하여 강제로 예외를 발생시킨다.
이때 사용자 정의 메세지 "내 마음대로 에러 메세지"가 예외와 함께 전달된다.
except Exception as error구문에서 발생한 예외를 잡아내고 error는 발생한 예외 객체(인스턴스)를 참조한다.
5. 예상치 못한 상황에서 강제 종료 시키기
구문 형식: assert 조건, '에러메세지'
조건이 거짓일 경우 AssertionError발생
def add(a, b):
assert a!=3, 'a가 3이다!'
print(a+b)
add(3, 5) # 출력: AssertionError: a가 3이다!
add(4, 5) # 출력: 9
'💂군대 > KAIST ICT Academy' 카테고리의 다른 글
[Numpy] Numpy Arrays (0) | 2024.11.02 |
---|---|
[후기] 군 장병 KAIST ICT Academy 수료 (7) | 2024.11.02 |
M11 - 상속과 오버라이딩 (0) | 2024.10.12 |
M10 - 클래스와 인스턴스 (3) | 2024.09.21 |
MO9 - 문자열과 입출력 (7) | 2024.09.18 |