본문 바로가기
파이썬/파이썬 기본 문법

[파이썬] 예외처리 try except

by Nov19 2018. 12. 11.
반응형


[파이썬] 예외처리 try except finally


파이썬에서는 오류가 발생하면 어디서 어떤 오류가 발생했는지 알려주면서 프로그램을 중단시킨다. 

이런 오류 발생 시 상황에 따라 오류가 다른데 

리스트의 범위 밖을 참조하면 IndexError: list index out of range 에러가 발생하고

0으로 나누려는 시도를 했을 때는 ZeroDivisionError: division by zero 오류가 발생한다.


이런 오류는 프로그램을 중단시키는데 사용자가 프로그램을 사용하던 중 오류를 만나 프로그램이 중단되는 것보다 적절히 처리시켜주는 것이 좋다.


예외 처리 방법

1. try, except만 쓰는 방법

try:

<처리할 내용 (오류 발생 가능 내용)>

except:

<예외 처리 내용>

 

이 경우는 오류 종류에 상관없이 오류가 발생하기만 하면 except 블록을 수행한다.


2. 발생 오류만 포함한 except

try:

<처리할 내용 (오류 발생 가능 내용)>

except 발생 오류:

<예외 처리 내용>

 

오류가 발생했을 때 except문에 미리 정해 놓은 오류 이름과 일치할 때만 except 블록을 수행한다는 뜻이다.


3. 발생 오류와 오류 메시지 변수까지 포함한 except

try:

<처리할 내용 (오류 발생 가능 내용)>

except 발생 오류 as 오류 메시지 변수:

<예외 처리 내용>


try:

<처리할 내용>

except ZeroDivisionError as e:

    print(e)

except IndexError as e:

    print(e)


2개 이상의 오류를 동시에 처리하기

try:

    <처리할 내용>

except (ZeroDivisionError, IndexError) as e:

    print(e)


4. 발생오류와 관계없이 항상 수행 try .. finally

try문에는 finally절을 사용할 수 있다. finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다. 

보통 finally절은 사용한 리소스를 close해야 할 경우에 많이 사용된다.

try:

f = open("없는 파일","r")

finally

f.close()

 

오류 회피하기

프로그래밍을 하다 보면 특정 오류가 발생할 경우 그냥 통과시켜야 할 때가 있을 수 있다.

try:

    f = open("파일이름", 'r')

except FileNotFoundError:

    pass

try문 내에서 FileNotFoundError가 발생할 경우 pass를 사용하여 오류를 회피한다.


오류 일부러 발생시키기

raise라는 명령어를 이용해 오류를 강제로 발생시킬 수 있다.

클래스를 상속받는 자식 클래스에서 함수를 구현하도록 만들고 싶은 경우 사용한다.

class Unit:

    def attack(self):

        raise NotImplementedError


class Marine(Unit):

def attack(self):

print("attack")


오류 만들기

프로그램 수행 도중 특수한 경우에만 예외처리를 하기 위해서 종종 오류를 만들어서 사용할 수 있다.

파이썬 내장 클래스인 Exception클래스를 상속하여 만들 수 있다.


오류 메시지를 출력했을 때 오류 메시지가 보이게 하기 위해서는 오류 클래스에 __str__() 매서드를 구현해야 한다

__str__ 메서드는 print(e) 처럼 오류메시지를 print문으로 출력할 경우에 호출되는 메서드이다.

만약 에러 발생시점에 오류메시지를 전달하고 싶다면 다음과 같이 수정해야 한다.


class CustomError(Exception):

    def __init__(self, msg):

        self.msg = msg

 

    def __str__(self):

        return self.msg

 


반응형

'파이썬 > 파이썬 기본 문법' 카테고리의 다른 글

[파이썬] 외장함수 1  (0) 2018.12.11
[파이썬] 내장함수  (0) 2018.12.11
[파이썬] 모듈 Module  (0) 2018.12.11
[파이썬] 클래스 Class  (0) 2018.12.11
[파이썬] 파일 입출력 File I/O input output  (0) 2018.12.10

댓글