try, except문
1. try, except만 쓰기 : 오류 종류에 상관없이 오류 발생하면 except블록 수행
try:
...
except:
...
try:
idx = "python".index("a")
print(idx)
except:
print("문자열에는 a자는 존재하지 않습니다.")
2. 발생 오류만 포함한 except문 : 미리 써놓은 특정 오류 발생하면 except블록 수행
try:
...
except 발생오류:
...
try:
print(4/0)
except ZeroDivisionError:
print("0으로는 나눌 수 없습니다.")
# 0으로는 나눌 수 없습니다.
3. 발생 오류와 오류메시지 변수까지 포함한 except문 : 오류메시지내용까지 알고 싶을 때
try:
...
except 발생오류 as 오류 메시지 변수:
...
try:
print(4/0)
except ZeroDivisionError as e:
print("0으로는 나눌 수 없습니다.","오류메시지:",e)
# 0으로는 나눌 수 없습니다. 오류메시지: division by zero
try ... finally문
try:
...
except 발생오류 as 오류 메시지 변수:
...
finally:
예외발생 여부 상관없이 항상 수행해야 하는 구문
보통 프로그램종료, close해야 할 때 많이 사용한다.
f= open('foo.txt','w')
try:
idx = "python".index("p")
f.write(idx)
except:
f.write("문자열에는 a자는 존재하지 않습니다.")
finally:
f.close()
# 문자열에는 a자는 존재하지 않습니다. 예외처리 구문 파일에 출력 후 finally구문 실행
여러개의 오류 처리하기
try:
....
except 발생오류1
....
except (발생오류2,발생오류3)
....
try :
a=[5]
print(a[0]) #IndexError
print(int('1')) #ValueError
4/2 #ZeroDivisionError
except (ValueError,IndexError) as e:
print(e,":프로그램 입력 오류")
except ZeroDivisionError as e:
print(e,":0으로 나누지 마세요")
except: #그외 모든 오류 처리. 다중예외처리의 마지막에 구현
print("프로그램 오류가 발생했습니다. 확인하세요.")
else: #try 블럭에서 예외 발생이 안된 경우
print("오류가 없으면 else로 와요~")
pass : 오류 회피하기
pass예약어를 사용하면 오류가 발생해도 그냥 지나간다.
try:
오류나는 구문
except:
pass
try:
age = int('dd') #ValueError
if age < 19:
print("미성년입니다.")
else:
print("성인입니다.")
except:
pass
raise : 오류 발생시키기
raise 발생오류
class Parent :
def method(self) : #추상함수
raise NotImplementedError
class Child(Parent) :
def method(self) :
print("자손클래스에서 오버라이딩 함")
ch1=Parent()
ch1.method()
# 오류발생 NotImplementedError
ch2 = Child()
ch2.method()
# 자손클래스에서 오버라이딩 하지 않으면 오류 발생
예외 만들기 : 내장 클래스 Exception 상속받기
class 에러클래스명(Exception)
def __str__(self):
return "에러메시지내용"
raise 에러클래스명()
class MyError(Exception):
def __str__(self):
return "허용되지 않은 별명"
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
say_nick("바보")
# 오류발생 : MyError: 허용되지 않은 별명
try:
say_nick("바보")
except MyError as e:
print(e,": 저는 바보가 아닙니다.")
# 허용되지 않은 별명 :저는 바보가 아닙니다.
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] Numpy 모듈 (0) | 2022.01.11 |
---|---|
[Python] 정규표현식(re 모듈) (0) | 2022.01.02 |
[Python] 모듈 (0) | 2021.12.29 |
[Python] 클래스 (0) | 2021.12.29 |
[Python] 파일 읽고 쓰기 (0) | 2021.12.28 |