- 기본 예외 처리
조건문을 사용하는 법과, try 구문을 사용하는 방법이 있다
try구문
try:
오류가 발생할 수 있는 구문
except Exception as e:
오류가 발생 했을때 실행
else:
오류 발생하지 않음
finally:
마지막에 무조건 실행
오류 회피하기
except FileNotFoundError:
pass
오류 일부러 발생시키기
부모 클래스를 변형해서 쓸때 주로 사용함
raise Error명
Error명을 실행했을때 오류가 발생함
try
try절이 실행되어 예외가 발생하지 않으면 except를 건너뛰는데, 예외가 발생하면 오류를 확인하며 except의 매칭되는 부분으로 넘겨준다
try구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다
except
오류가 발생했을 때 처리할 내용을 담는다
(예외가 발생하지 않으면 else가 실행됨, 예외가 발생하면 finally)
Exception 는 모든 예외의 부모, 에러이름을 모를때 주로 사용
as 뒤에는 보통 e 를 넣거나, exception(소문자)로 많이 넣음
else
try절에서 esle는 에러가 발생하지 않을때 실행하게 되는 블럭
반드시 except 구문 뒤에 사용해야함
finally
예외의 발생여부와 상관없이 무조건 실행되는 블럭, 일반적으로 리소스를 오픈한 후 이를 close() 하는 경우에 많이 사용된다
fianlly는 필요에 따라서 사용한다(옵션)
함수내부: return이 있을때 finally가 없으면 return 하고 그냥 빠져나가 버림
반복문 내부: break
file.close() 처리할때 주로 사용
ex)
while True: #while을 사용하여 숫자를 입력할때 까지 오류 나지않고 무한반복 돌려주기
try:
print(float(input("숫자를 입력해주세요: ")) ** 2)
break
except:
#에러가 나지 않게 미리 except문에 넣어놓음
print("숫자를 입력해주세요")
ex)
a = 1 + 'one'
print('결과는', a, '입니다') #에러가 갈것같은 코드를 미리 예외처리 해줌
->
try:
a = 1 + 'one'
except TypeError: ### 에러명을 모를때는 그냥 except만 적어주면 모든에러를 감지한다
print('TypeError가 발생함') # 에러가 나는 코드를 실행시 멈추지않고 에러가 발생했다는 출력을 해줌
ex)
class UndefinedVehicle(Exception):
def str(self):
return "정의되지 않은 탈것 입니다"
vehicle = input("자전거, 오토바이, 자동차중 하나를 선택하시오>>")
try:
if vehicle not in ['자전거', '오토바이', '자동차']:
raise UndefinedVehicle
except UndefinedVehicle as e:
print(e)
출력-> 자전거, 오토바이, 자동차중 하나를 선택하시오>>
정의되지 않은 탈것 입니다
ex)
try:
a = [133,5,65,77,1]
number = int(input("정수 입력(0~4까지 입력해주세요)>"))
print(a[number])
except Exception as e:
if type(e) == ValueError: #정수로 입력을 안했을 때
print("값에 문제가 있습니다")
elif type(e) == IndexError: #0~4까지 입력을 안했을 때
print("0~4까지를 입력해주세요.")
-> 조건문을 except로만 사용하기