2018. 2. 2. 16:59ㆍPython-이론/python
예외 처리
프로그램을 작성하다 보면 오류가 발생할 때가 많다. 하지만 같은 코드임에도 상황에 따라 오류가 발생할 때도 있고 발생하지 않을 수 도있다. 오류가 발생때를 무시하고 오류가 발생할 때 안발생할때 모두 실행되게 하고 싶다면 예외처리를 사용하면된다.
오류 예외 처리 기법
try, except문
try, except문의 기본 구조이다.
try: ... except [발생 오류[as 오류 메세지 변수]]: ...
try블록의 코드가 실행중에 오류가 발생하면 except 블록이 수행된다. try블록에 오류가 발생하지 않는다면 except 블록은 수행되지 않는다.
위의 사용방법에서 []쳐져 이는 것은 생략이 가능하다는 말이다. 따라서 사용할 수 있는 방법이 여러가지가 있다.
1. try, except만 쓰는 방법
try: ... except: ...
이 방법은 어떤 오류가 발생하든 except문을 수행한다.
2. 발생 오류만 포함한 except문 strong>
try: ... except 발생오류: ...
이 경우는 오류가 발생했을 때 except구문에서 미리 정해 놓은 오류 이름과 일치할 때만 except 블록을 수행한다는 뜻이다.
3. 발생 오류와 오류 메세지 변수까지 포함한 except 문
try: ... except 발생 오류 as 오류 메세지 변수: ...
try....else
try 문은 else 절을 사용할 수 있다. else절은 except 절이 실행되지 않는 경우에 실행되면 반드시 except절 바로 다음에 위치해야한다.
try: f = open("victory",'r') except FileNotFoundError as e: print(str(e)) else: data = f.read() f.close()
except가 실행되지 않으면 else밑의 구문이 실행되고 반드시 except 밑에 있어야한다.
try.. finally
finally는 오류가 발생하든 말든 무조건 실행된다. p>
f = open('foo.txt','w') try: # 코드 finally: f.close()
오류 회피하기
프로그램을 하다가 오류가 발생하는 경우 그냥 무시하고 통과하고 싶을때가 있다. 이때는
try: f = open("나없는 파일",'r') except FileNotFoundError: pass이런식으로 사용하면된다.
오류 고의로 발생시키기
오류를 고의로 발생시키려면 raise함수를 사용 해주면 된다. raise 오류명
부모 클래스에서 오류가 발생하게 만들어 둔뒤 이클래스를 상속한 자식 클래스에서 무조건 오버라이딩을 유도하게 코드를 작성할 수 있다.
오류 만들기
프로그램을 수행 도중 고의로 오류를 만들 수 있다. 방법은 클래스를 만든 뒤에 Exception이라는 클래스를 사속받으면 된다.
class MyError(Exception): pass def john(nick): if (nick =='바보'): raise MyError() else: return "천사" print(john('천사')) print(john('바보'))
try...catch...문과 함께 사용하기
class MyError(Exception): pass def john(nick): if (nick =='바보'): raise MyError() else: return "천사" try: print(john('천사')) print(john('바보')) except: print("바보가 아닙니다.")
try....catch as문과 오류메세지를 만들어서 보내기
try: print(john('천사')) print(john('바보')) except MyError as e: print(e)
e에 메세지를 자기가 저장해서 호출하고 싶다면 어떻게 해야할까? 내장 함수중에 __str__을 사용하면 된다.
class MyError(Exception): def __init__(self, message): self.msg = message def __str__(self): return self.msg
형태로 사용해주면 된다.
'Python-이론 > python' 카테고리의 다른 글
파이썬 프로그래밍의 기초: 외부함수 (0) | 2018.02.05 |
---|---|
파이썬 프로그래밍의 기초:내장 함수 (0) | 2018.02.02 |
파이썬 프로그래밍의 기초: 패키지 (0) | 2018.02.01 |
파이썬 프로그래밍의 기초: 모듈 (0) | 2018.02.01 |
파이썬 프로그래밍의 기초: 클래스 3편 (0) | 2018.01.31 |