IT흔적

[파이썬] 4.예외처리 - try, except문 본문

DO it! Python/05.파이썬 날개 달기

[파이썬] 4.예외처리 - try, except문

흔적남기는 개발자 2018. 12. 29. 10:40

 예외처리 - 오류 발생시 예외적으로 오류를 처리할 때 try, execpt 이용


'''
오류파일 만들기

chams = [1, 2, 3, 4]
print(chams[4])

Traceback (most recent call last):
File "D:/SunWoong/python/mod.py", line 2, in <module>
print(chams[4])
IndexError: list index out of range # 인덱스 오류 발생
'''

# 오류값 나오게 하기

try:
chams = [1, 2, 3, 4]
print(chams[4])
except IndexError as a: # try :
print(a) # except 발생오류 as 오류 메시지 변수: print(변수)


# 결과값: list index out of range

 

try.. else -  else절은 예외가 발생하지 않은 경우에 실행

try:
f = open('woong.txt','r')
except FileNotFoundError as s:
print(s)
else:
data = f.read()
f.close()

# woong.txt 파일이 없으면 except문이 실행
# 출력값: ([Errno 2] No such file or directory: 'woong.txt')


try ~ finally - finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다. 보통 finally절은 사용한 리소스를 close해야 할 경우에 많이 사용

try:
4/0
finally:
print("선웅")


# 출력값 :

Traceback (most recent call last): File "D:/SunWoong/python/mod.py", line 2, in <module> 4/0 ZeroDivisionError: division by zero 선웅


상관없이 값이 나온다.



3. 여러개의 오류 처리하기 # try문 내에서 여래개의 오류를 처리하기 위해서는 다음과 같은 구문을 이용한다.

try:

    ~

except 발생 오류1:

    ~

except 발생 오류2:

    ~

try:
chams = [1, 2, 3, 4]
print(chams[4])
3/0
except IndexError:
print("챔스 진출 못함")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")

# 출력값: 챔스 진출 못함. 첫번재 오류만 가져와준다 만약 첫번재 코드 조건이 맞으면


try:

chams = [1, 2, 3, 4]

print(chams[2])

3/0

except IndexError:

print("챔스 진출 못함.")

except ZeroDivisionError:

print("0으로 나눌 수 없습니다.")


# 출력값: 3

0으로 나눌 수 없습니다.


(2) 오류 메시지 가져오기

try:

chams = [1, 2, 3, 4]

print(chams[4])

3/0

except IndexError as a:

print(a)

except ZeroDivisionError as a:

print(a)

# 출력값: list index out of range

(3) 두개를 한꺼번에 묶어서

try:
chams = [1, 2, 3, 4]
print(chams[4])

3/0

except (IndexError, ZeroDivisionError) as a:

print(a)


결과값: list index out of range



오류 회피하기 특정 오류가 발생할 경우 그냥 통과시켜야 할 때 이용

try:
chams = [1, 2, 3, 4]
print(chams[4])
except IndexError:
pass

# 오류 값을 무시한다.

 오류 일부러 발생시키기 raise, NotlmplementedError 사용


class EPL:
def team(self):
raise NotImplementedError # raise는 오류를 강제로 발생, NotImplementedError 파이썬 내장 오류

class real(EPL):
pass

key = real()
key.team()
# 출력값:
Traceback (most recent call last):
  File "D:/SunWoong/python/mod.py", line 9, in <module>
    key.team()
  File "D:/SunWoong/python/mod.py", line 3, in team
    raise NotImplementedError  # raise는 오류를 강제로 발생, NotImplementedError 파이썬 내장 오류
NotImplementedError