티스토리 뷰

Programming Languages/Python

Python 예외처리 Try

sw편한세상 2011.07.27 05:37
일반적인 언어에서 예외처리는 try catch로 매핑되지만 python에서는 try except를 사용한다.

파일입출력이나 시리얼통신에 많이 사용되는데 시리얼통신을 할 경우 이 포트가 열리는 포트인지 안열리는 포트인지 잘 모르기 때문에 포트 오픈 라인에 예외처리를 해주면 포트가 열리지 않았을 경우에도 프로그램이 종료되지 않는다.


try:
	예외가 발생할만한 문구

except 예외종류, 예외변수: #예외 종류, 변수는 생략가능
	예외 발생시 실행되는 문구

else:
	예외가 발생하지 않았을 때 실행되는 문구

finally:
	예외 방생 여부에 상관하지 않고 실행되는 문구


 
로 볼 수 있다.
시리얼통신에러의 경우 serial.serialutil.SerialException 라는 에러를 발생시키는데 에러가 발생했을 경우 메시지를 보고 싶으면 다음과 같이 입력한다.
# Python Serial 예외처리 예

try:
	port = serial.Serial(5, 9600)
	port.write("초기화패킷")		
except serial.serialutil.SerialException, e:
	print e

else:
	print port


예외종류에는

ZeroDivisionError
NameError
TypeError
KeyError
IOError
IndexError
AttributeError

등이 있다. 
확인방법은 try를 지우고 에러를 발생시키면 된다.

또한 serial 소스를 분석하다 보면
if self.hComPort == win32.INVALID_HANDLE_VALUE:
	self.hComPort = None    # 'cause __del__ is called anyway
	raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.WinError()))

다음과 같이 raise를 사용한 것을 볼 수 있는 데 이것은 의도적으로 예외를 발생시키는 경우이다.

'Programming Languages > Python' 카테고리의 다른 글

Python 쓰레드(Thread)  (0) 2011.08.01
Python for loop 와 while loop  (0) 2011.08.01
Python 예외처리 Try  (2) 2011.07.27
Python 리스트 조건 제시법  (0) 2011.07.24
Pywin32 및 Pyserial Downloads  (0) 2010.10.08
Panda3D 시작화면 조정하기.  (1) 2010.04.02
댓글
  • 프로필사진 Favicon of http://k.pandoraoutls.us pandoras 아내는 수저를 들려고 하다가 문득 상위에 놓인 쪽지를 보았다. 2013.04.07 19:41 신고
  • 프로필사진 나즈나 일반적인 언어라는 표현은 부적절합니다.
    많은 언어들은 try catch보다 try except를 더 많이 사용합니다.
    자바에서 영향을 받은 언어들이 대게 catch고 그 외에 수많은 언어는 except또한 많습니다.
    2017.03.16 23:28 신고
댓글쓰기 폼
공지사항
Total
374,453
Today
23
Yesterday
47
링크
«   2018/12   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함