TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 파이썬기초: 예외 처리(Exception Handling)

by 기록자_Recordian 2024. 6. 20.
728x90
반응형
시작에 앞서
해당 내용은 '<Do it! 점프 투 파이썬> 박응용 지음. 이지스 퍼블리싱' 을 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적에 상세히 나와있으니 서적을 참고해 주시기 바랍니다.

예외 처리(Exception Handling)

 

파이썬에서는 try, except 를 사용하여 예외적으로 오류를 처리할 수 있게 해준다.

 

◆ 오류가 발생하는 상황

- 구문 오류(오타 입력 등, SyntaxError)

- 디렉터리 안에 없는 파일을 열려고 시도할 때 발생하는 오류 (FileNotFoundError)

- 0으로 다른 숫자를 나누는 경우 발생하는 오류(ZeroDivisionError)

- 리스트에 없는 값을 입력할 때 발생하는 오류(IndexError)


오류 예외 처리 기법 - try, except 문

 

try 블록 수행 중 오류가 발생하면 except 블록이 수행된다.

그러나 try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않는다.

<try, except 문의 기본 구조>
try:
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ...

 

▶ [ ]  기호는 괄호 안의 내용을 생략할 수 있다는 관례표기법이다.

 

◆ except 구문의 사용 방법

 

1. try, except만 쓰는 방법

오류 종류에 상관없이 오류가 발생하면 except 블록 수행

 

2. 발생 오류만 포함한 except문

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

 

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

2번의 경우에서 오류 메시지의 내용까지 알고 싶을 때 사용하는 방법

3번 except문의 예


오류 예외 처리 기법 - try, finally 문

 

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

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

▶ 에러가 발생해도 finally절은 실행되는 것을 알 수 있다.


여러 개의 오류 처리하기

 

try:
    ...
except 발생 오류 1:
    ...
except 발생 오류 2:
    ....

 

▶ 인덱싱 오류가 먼저 발생했으므로, 다음에 발생하는 ZeroDivisionError 오류는 발생하지 않았다.

 

2개 이상의 오류를 동시에 처리하기 위해서는 괄호를 사용하여 함께 묶어 처리하면 된다.


오류 회피하기

 

특정 오류가 발생할 경우 그냥 통과시켜야 할 때는 pass를 사용한다.

오류가 발생하지 않는다.


오류 일부러 발생시키기 (raise 명령어)

 

예를 들어, Bird 클래스를 상속받는 자식 클래스는 반드시 fly 라는 함수를 구현하도록 만들고 싶은 경우,

 

▶ NotImplementedError: 파이썬 내장 오류, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기기 위해 사용

 

만약 자식 클래스가 fly 함수를 구현하지 않은 상태로 fly 함수를 호출한다면?

▶ Eagle 클래스는 Bird 클래스를 상속받는다. 그런데 Eagle 클래스에서 fly함수를 구현하지 않았기 때문에 Bird 클래스의 fly 함수가 호출되고 raise 문에 의해 NotImplementedError가 발생

 

만약 해당 에러가 발생되지 않게 하려면 Eagle 클래스에 fly함수를 반드시 구현해야 한다.

▶ fly 함수를 구현한 후 프로그램을 실행하면 오류 없이 문장이 잘 출력된다.


예외 만들기

 

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

 

그리고 별명을 출력해주는 함수를 만들고, 해당 함수를 아래와 같이 호출해보면,

▶ '천사'가 출력된 후 MyError가 발생한다.

 

예외 처리 기법을 통해 MyError 발생을 예외처리 해본 뒤 프로그램을 실행하면

 

만약 오류 메시지를 사용하고 싶은 경우 아래와 같이 예외 처리를 하면 된다.

▶ print(e)로 오류 메시지가 출력되지 않는데, 이를 출력하게 하려면 오류 클래스에 __str__ 메서드를 구현해야 한다.

 

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

 


전체 코드

05. Exception_Handling.ipynb
0.01MB

728x90
반응형