1. 오류 발생 예
2. 오류 예외 처리 기법의 종류
3. 오류 통과 시키기
4. 오류 강제 발생 시키기
5. 오류 예외 처리 실습시간~
1. 오류 발생 예
1. 없는 파일을 열 때
>>> f = open("나눈없는파일", 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '나눈없는파일'
2. 0으로 나눌 때
>>> 2 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
3. 없는 값을 불러올 때
>>> a = [1,2,3]
>>> a[4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
2. 오류 예외 처리 기법의 종류
try, except문
아래는 기본 구조이다.
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
(1) try, except만 쓰는 방법
try:
...
except:
...
발생 오류와 관계 없이 오류가 생기면 except을 실행한다.
(2) 발생 오류만 포함한 except문
try:
...
except 발생 오류:
...
발생 오류와 똑같은 이름의 오류가 발생하면 ecxept을 실행한다.
(3) 발생 오류와 오류 메시지 변수까지 포함한 except문
try:
...
except 발생 오류 as 오류 메시지 변수:
...
2번째 경우에서 오류 메시지의 내용까지 알고 싶을 때 사용하는 방법이다.
예를 들면 아래와 같다.
try:
3 / 0
except ZeroDivisionError as e:
print(e)
division by zero # 출력값
try .. finally 문
finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다.
사용한 리소스를 close해야 할 때에 많이 사용한다.
newfile = open('test.txt', 'w')
try:
# 문장 수행~~~
finally:
f.close() # 무조건 파일을 닫는다
여러개의 오류 처리
구조는 다음과 같다.
try:
...
except 발생 오류1:
...
except 발생 오류2:
...
예시를 보자면
try:
a = [1,2]
print(a[3])
3/0
except ZeroDivisionError:
print("0으로 못 나눵.")
except IndexError:
print("그거 안에 없엉.")
위의 예의 경우, IndexError가 먼저 발생한다.
먼저 실행된 오류가 있으므로 ZeroDivisionError는 발생되지 않았다.
오류 메세지로 똑같은 방법으로 가져올 수 있다.
1.
try:
a = [1,2]
print(a[3])
3/0
except ZeroDivisionError as e:
print(e)
except IndexError as e:
print(e)
2. 같이 묶어서 편하게 처리할 수도 있다.
try:
a = [1,2]
print(a[3])
3/0
except (ZeroDivisionError, IndexError) as e:
print(e)
try문에 else절 사용하기 (제일 많이 쓸 것 같음)
구조는 아래와 같다.
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
else: # 오류가 없다면 실행된다.
...
예시는 아래와 같다.
try:
age=int(input('나이를 입력하세요: '))
except:
print('입력이 정확하지 않습니다.')
else:
if age <= 18:
print('미성년자는 꺼져라.')
else:
print('반갑습니다 고갱님^^.')
오류 발생을 하지 않을 경우에만 else 구문이 실행되고 오류가 있으면 입력 제대로 하라는 문구가 뜬다.
3. 오류 통과 시키기
except에 pass만 넣어주면 된다.
try:
f = open("나눈없는파일", 'r')
except FileNotFoundError:
pass
4. 오류 강제 발생 시키기
raise를 이용하게 오류를 강제로 발생 시킬 수 있다.
NotImplementedError는 파이썬 내장 오류로,
꼭 작성해야 하는 부분이 구현이 되지 않았다면 강제 오류를 일으키기 위해 사용한다.
class family:
def member(self):
raise NotImplementedError # raise를 이용하여 오류 강제 발생
class Lee(family): # 부르는 클래스에서 따로 함수를 만들지 않음
pass
lee = Lee() # 객체에 넣고
lee.member() # 불러온 패밀리 클래스의 함수로 실행 시켜보면
Traceback (most recent call last): # 에러가 뙇!!!
File "...", line 24, in <module>
lee.member()
File "...", line 17, in fly
raise NotImplementedError
NotImplementedError
때문에 위와 같은 경우,
부르는 클래스(Lee)에서 member 함수를 재구현(메서드 오버라이딩)을 해주어야 오류가 나지 않고
만약 family 클래스의 member 함수를 그대로 재사용하면 에러가 나도록 되어있는 상태였다.
5. 오류 예외 처리 실습시간~
아래처럼 파이썬 내장 클래스인 Exception 클래스를 이용하면 예외를 만들 수 있다.
class Erroryam(Exception):
pass
def adult(age):
if age <= 19:
raise Erroryam()
print("당신은 성인~")
if문에 걸려서 구문이 돌게 되면 Erroryam이 발생한다.
그럼 예외 처리를 해서 예외에 해당되면 멘트가 나가게 만들어보자.
try:
adult(15)
except ErrorYam:
print("니 성적에 잠이 오냐")
이 처럼 에러를 발생시키는 클래스를 만들고 에러 예외처리를 이용해서 멘트가 출력되게 만든다. 끝.
'파이썬(Python) > 파이썬(Python) 기초' 카테고리의 다른 글
파이썬(Python) 5장 추가적인 기본 사항 - 6. 라이브러리 (0) | 2022.07.12 |
---|---|
파이썬(Python) 5장 추가적인 기본 사항 - 5.내장 함수 종류 몇 가지 (0) | 2022.07.11 |
파이썬(Python) 5장 추가적인 기본 사항 - 3. 패키지 (0) | 2022.07.08 |
파이썬(Python) 5장 추가적인 기본 사항 - 2. 모듈 (0) | 2022.07.07 |
파이썬(Python) 5장 추가적인 기본 사항 - 1. 클래스 (2) | 2022.07.06 |
댓글