標籤:異常處理 python socket parse
異常處理+命令列解析庫argparse
Socket.error 與一般I/O和通訊問題有關的
Socket.gaierror 與查詢地址有關的
Socket.herror 與其他地址錯誤有關
Socket.timeout 與一個socket上調用settimeout()後,逾時處理有關
#-*- coding:utf-8 -*-import sysimport socketimport argparse#通過命令列輸入參數 python 1_7_socket_errors.py --host=www.python.org --port=8080 --file=1_7_socket_errors.py#也可直接指定host和port,運行。def main(): #建立一個解析器 parser = argparse.ArgumentParser(description = "Socket Error") #添加參數選項 parser.add_argument('--host',action="store",dest="host",required=False) parser.add_argument('--port',action="store",dest="port",required=False,type=int) parser.add_argument('--file',action="store",dest="file",required=False) #調用parse_args()方法進行解析 given_args = parser.parse_args() host = given_args.host port = given_args.port #也可以自己指定port,host #host = "www.python.org" #port = 80 filename = given_args.file #處理建立通訊端異常 try: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) except socket.error,e: print "Error creating socket:%s"%e sys.exit(1) #處理串連通訊端異常 try: s.connect((host,port)) except socket.gaierror,e: print"Address-related error connecting to server:%s"%e sys.exit(1) except socket.error,e: print"Connection error:%s"%e sys.exit() #處理髮送資料錯誤 try: #GET方法 發送到網網站 s.sendall("GET %s HTTP/1.0\r\n\r\n"%filename) except socket.error,e: print"Error sending data:%s"%e sys.exit(1) while 1: try: #接受網站給返回的資料 buf = s.recv(2048) except socket.error,e: print"Error receiving data:%s"%e sys.exit(1) if not len(buf): break #將buf資料發送到命令列中 sys.stdout.write(buf)if __name__ == "__main__": main()
python添加命令列參數和異常處理