05-4 예외처리
If문 조건문 생각하면 거의 비슷하다

try-except 문
try:
...
except [발생오류 [as 오류변수]]:
...
# try_except.py
try:
4 / 0
except ZeroDivisionError as e:
print(e)
4/0을 실행했을 때 오류가 뜨고
이 오류를 e라고 부르겠다.
이 오류를 잡아주고 프린트 해주는 것
try-finally 문
Finally는 오류가 나도 무조건 수행되는 문장
여러 개의 오류 처리하기
try:
...
except 발생오류1:
...
except 발생오류2:
...
# many_error.py
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("인덱싱 할 수 없습니다.")
인덱싱 할 수 없습니다. 에러가 뜬다
가장 먼저 터지는 에러의 에러메시지가 뜬다
이렇게 묶어서도 가능하다
try:
4 / 0
except (ZeroDivisionError, IndexError) as e:
print(e)
division by zero
try:
a = [1,2]
print(a[3])
4/0
except (ZeroDivisionError, IndexError) as e:
print€
list index out of range
try-else 문
# try_else.py
try:
age=int(input('나이를 입력하세요: '))
except:
print('입력이 정확하지 않습니다.')
else:
if age <= 18:
print('미성년자는 출입금지입니다.')
else:
print('환영합니다.')
Error가 아닐경우 else문 실행된다.
오류 회피하기
# error_pass.py
try:
# 설정 파일을 읽으려 시도
f = open("설정파일.txt", 'r')
config = f.read()
f.close()
except FileNotFoundError:
pass # 설정 파일이 없어도 계속 진행
# 프로그램의 주요 기능은 계속 수행
print("프로그램이 정상적으로 실행됩니다.")
오류가 발생해도 그냥 패스하게 된다
오류 일부러 발생시키기
class Bird:
def fly(self):
raise NotImplementedError
class Eagle(Bird):
pass
eagle = Eagle()
eagle.fly()
펄럭펄럭
Raise를 쓰면 일부로 에러가 터진다
꼭 덮어 쓰지 않으면 안되게 하려고
이렇게 강제를 하기 위해서 일부러 에러가 나게 함
class MyError(Exception):
pass
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
say_nick("바보")
나만의 에러 클래스
익셉션 클래스를 상속받고
바보라 쓰면에러가 터지게 구현
class MyError(Exception):
def __str__(self):
return "허용되지 않는 별명입니다."
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
# say_nick("바보")
try:
say_nick("천사")
say_nick("바보")
except MyError:
print("허용되지 않는 별명입니다.")
에러메시지 추가 하려면 에러메시지에 추가
바보라쓰면 에러가 발생해 익셉션이터지고
허용되지 않는 별명입니다 출력
근데 이렇게 에러를 만들일 별로 없음