티스토리 뷰
예외처리란 무엇일까요?
예외처리를 하는 코드는 어떻게 생겼을까요?
try: #실행할 코드 except 발생오류: #오류발생 시 처리할 코드
try ... except ... 문을 통해서 예외처리를 할 수 있습니다. except 뒤에는 예상되는 발생오류의 이름을 적습니다. 쉬운 예를 하나 들어서 직접 사용해보도록 하겠습니다. 파이썬 인터프리터에 2/0을 실행하면 어떤 에러가 발생할까요?
Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero
위의 소스코드와 같은 ZeroDivisionError가 발생합니다. 해당 에러는 0으로 나눌 때 생기는 에러입니다. 이제는 예외처리를 통해서 다른 경고음을 주도록 하겠습니다.
try: 2/0 except ZeroDivisionError: print("0으로 나눌수는 없습니다.")
해당 소스코드를 실행하면 "0으로 나눌수는 없습니다"라는 경고음이 나타납니다. 즉 바로 에러로 인해 프로그램이 멈춘 것이 아니라 우리가 처리한 상황으로 넘어가서 프로그램이 멈추지 않게 됩니다.
예외의 종류
try: #처리할 구문 except ZeroDivisionError: #예외 발생시 실행할 구문 except NameError: #예외 발생시 실행할 구문 except (IndexError, KeyError): #예외 발생시 실행할 구문
여러가지의 예외처리를 할 경우엔 위와 같이 하시면 됩니다. 제일 먼저 발생되는 에러에 따라 구문이 실행됩니다.
IndexError와 KeyError가 발생했을 땐 같은 구문이 실행됩니다.
예외 직접 만들기
class makeError(Exception): def __str__(self): return "에러가 발생했습니다." #False를 넣으면 에러가 발생하는 함수입니다. def test(bool): if(bool): print("에러가 발생하지 않았습니다.") else: raise makeError() test(True) test(False)
makeError라는 클래스는 Exception을 상속받은 제가 만든 에러입니다. test라는 함수에 False를 전달하면 에러가 발생합니다. raise는 에러를 강제로 일으키는 명령어입니다. 즉 스스로 에러를 만들어서 처리등을 할 수 있다는 말입니다. 상황에 맞게 에러를 일으켜서 연습해보세요!
좀 더 나아가기
try: test(True) except makeError as e: print(e) else: print("에러가 나지 않았습니다.") finally: print("에러에 상관없이 실행됩니다.")
else는 try구문에서 에러가 발생하지 않았을 때 실행됩니다. 즉 에러가 발생할 경우에는 실행되지 않습니다. finally는 에러의 발생과 상관없이 꼭 실행되는 구문입니다. except 구문에 as는 에러 발생시 구문을 뒤의 변수로 받습니다. 즉 e에는 우리가 makeError에 정의한 "에러가 발생했습니다."라는 구문이 들어가게 됩니다. test()함수에 False를 전달해보세요! 결과가 어떻게 달라지나요?
다음 포스팅에서는 우리가 배운 것들로 단어테스트 프로그램을 만들어보도록 하겠습니다.
공감은 제작자에게 큰 힘이 됩니다.
'Backend-dev > python' 카테고리의 다른 글
파이썬 인터프리터를 활용한 단어 테스트기 만들기 2 (1) | 2018.04.21 |
---|---|
파이썬 인터프리터를 활용한 단어 테스트기 만들기 (0) | 2018.04.20 |
파이썬의 모듈을 불러오는 방법과 pip (0) | 2018.04.11 |
클래스의 상속과 오버라이딩 (0) | 2018.04.10 |
파이썬의 클래스(class) (0) | 2018.04.09 |