위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
기본구조
try :
# code ...
except ErrorClass1, ErrorClass2, ... :
# action ...
try
문을 우선 실행하고 에러가 날 경우 해당 에러의except
문이 실행된다try
이후 code에 에러의 가능성이 있는 내용을 넣는다except
이후의ErrorClass
는 에러클래스이다. 해당 에러클래스에 대한 대응을 action에 적으면 된다- 에러클래스를 여러개 명시하면 적어준 여러개의 에러에 대해 동일하게 대응할 수 있다
- 에러클래스를 안적으면 모든 에러에 대해 단일한 대응을 할 수 있다
except
문을 에러마다 적어서 에러마다 다른 대응을 하는것도 가능하다- 대응하기 싫으면
pass
를 이용하자 - 에러클래스는 암거나 적어도 되는게 아니다. 파이썬에서 제공하는 에러클래스를 이용하던가, 에러클래스를 만들어야 가능하다
기본제공하는 몇가지 오류클래스
IndexError
: 리스트/튜플 등에서 존재하지 않는 인덱스를 접근했을때ZeroDivisionError
: 0으로 나눴을 때FileNotFoundError
: 존재하지 않는 파일을open()
하려 할때KeyError
: 존재하지 않는 딕셔너리의 키에 접근하려 할 때
오류 메세지 가져오기
except ErrorClass as a :
print(a)
- 에러가 발생할 경우 화면에 출력하기 좋은 에러 메세지를 문자열 형태로 기본 제공한다. 이것을
as a
로 변수a
에 받아서 출력할 수 있다 - 에러를 잡는다고 무조건 화면에 에러메세지가 뜨지는 않는다. 화면에 에러메세지를 띄우려면
print()
로 원하는 문구를 출력해야 한다
오류가 발생하든말든 반드시 실행시키기
finally :
# code ...
finally
문의 내용은 에러가 발생하든 말든 무조건 실행된다- 대표적으로 파일닫기에 주로 사용된다. 에러가 나도 열어놓은 파일은 반드시 닫아야 되기 때문에
finally
문에close()
를 넣어놓으면 에러가 나더라도 파일을 안전하게 닫을 수 있다
에러 일부러 발생시키기
raise ErrorClass
- 오류를 일부러 발생시켜야 할 때도 있다. 다음은 그 용례이다
- 자식클래스가 반드시 오버라이딩했으면 하는 메소드가 부모클래스에 있다고 하자
- 이럴때 부모클래스의 메소드에 오류를 발생시키면 자식클래스는 이것을 오버라이딩하지 않으면 오류가 나므로 무조건 오버라이딩할 수 밖에 없다
나만의 오류 만들기
class ErrorName(Exception) :
pass
Exception
클래스를 상속받아 클래스를 만들면 나만의 에러클래스를 만들 수 있다- 에러클래스로 선언돼있지도 않고 기본제공하는 에러클래스도 아닌경우에는
except
문에 사용할 수 없다
예외처리문의 필요성
- 예외처리를 if문으로 할 수도 있다. 어차피 try-except문도 조건문처럼 작동하기 때문이다.
- 하지만 조건문을 사용했을 때 같은 오류가 여러군데에서 발생하면 그 부분마다 조건문을 달아줘야하기 때문에 코드가 길고 복잡해진다
- try-except문을 이용하면 이런 오류들을 한꺼번에 처리할 수 있으므로 훨씬 간편하다는 이점 이 있다