프로그램 실행에 있어 에러가 발생할 경우, 이에 대한 적절한 처리를 위해서 Python에서도 try, exception 구문을 통해서 예외처리를 수행할 수 있도록 지원하고 있다.
대표적인 예외처리 구문으로 '파일 불러 오기' 구문이 있다.
예를 들어 아래와 같이 존재하지 않는 파일을 불러올 경우 'IOError'가 발생함을 볼 수 있다.
>>> open('FileName', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'FileName'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'FileName'
위와 같이 파일 불러오기 구문의 경우 실제 프로그램에서 에러가 자주 발생할 수 있는 부분으로 예외처리가 필수적이다.
Python에서는 아래와 같이 try, except 구문을 이용하여 예외처리를 수행할 수 있다.
try:
...
except [발생에러 [, 에러메시지변수]]:
...
<Type 1>
try:
...
except:
...
<Type 2>
try:
...
except 발생에러:
...
<Type 3>
try:
...
except 발생에러 , 에러메시지변수:
...
...
except [발생에러 [, 에러메시지변수]]:
...
<Type 1>
try:
...
except:
...
<Type 2>
try:
...
except 발생에러:
...
<Type 3>
try:
...
except 발생에러 , 에러메시지변수:
...
- <Type 1>은 에러 종류에 상관없이 에러가 발생하기만 하면 except문 다음의 문장을 수행
- <Type 2>는 발생한 에러가 except 문에서 정해놓은 에러와 같을 때만 except 문 아래의 문장을 수행
- <Type 3>는 Type 2에서 에러메시지를 담을 변수를 생성하게 하는 방법이다.
예외처리 구문을 포함한 파일 불러오기 예제
fileName = 'FileName' # 불러올 파일 이름
try:
open(fileName, 'r') # 읽기 모드(r)로 파일을 불러온다.
except IOError, e:
print e
print 'There is no "%s" file % fileName
실행결과:
[Errno 2] No such file or directory: 'FileOpen'
There is no "FileOpen" file
fileName = 'FileName' # 불러올 파일 이름
try:
open(fileName, 'r') # 읽기 모드(r)로 파일을 불러온다.
except IOError, e:
print e
print 'There is no "%s" file % fileName
실행결과:
[Errno 2] No such file or directory: 'FileOpen'
There is no "FileOpen" file
※ 에러 발생시키기 (raise)
raise는 일부러 에러를 발생시키기 위해서 사용하는 명령어로 경우에 따라서 어떠한 프로그래밍을 강제하기 위해서 사용할 수 있다. 예를 들어 클래스를 만들고 이를 상속받는 클래스에서 메소드를 반드시 구현하게 만들기 위해서는 아래와 같이 부모 클래스에서 raise를 이용할 수 있다.
>>> class Parent:
... def mustMake(self):
... raise NotImplementedError
>>> a = Parent()
>>> a.mustMake()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method mustMake() must be called with Parent instance as first argument (got nothing instead)
올바른 사용을 위해서는 아래와 같이 추가로 상속받는 클래스를 만들고 메소드를 구현해야 한다.
class Parent:
def mustMake(self):
raise NotImplementedError
class Child(Parent):
def mustMake(self):
print "mustMake() is made by Child class"
... def mustMake(self):
... raise NotImplementedError
>>> a = Parent()
>>> a.mustMake()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method mustMake() must be called with Parent instance as first argument (got nothing instead)
올바른 사용을 위해서는 아래와 같이 추가로 상속받는 클래스를 만들고 메소드를 구현해야 한다.
class Parent:
def mustMake(self):
raise NotImplementedError
class Child(Parent):
def mustMake(self):
print "mustMake() is made by Child class"
a = Child()
a.mustMake()
실행결과:
mustMake() is made by Child class
※ The class hierarchy for built-in exceptions
아래는 Python 자체 exception을 위한 발생에러 구조도이다. (URL:http://docs.python.org/library/exceptions.html )
'CAT-Security > 미분류' 카테고리의 다른 글
gdb 명령어 요약집 (0) | 2014.04.28 |
---|---|
[Defcon 21 ctf] policebox (0) | 2014.04.08 |
리버싱의 기초 정리 (0) | 2013.07.23 |
MBR 덤프해서 16비트 어셈블리 코드로 보는방법 (0) | 2013.07.22 |
MBR (Master Boot Record) 정리 (0) | 2013.07.22 |