python異常處理與斷言以及日誌模組
python異常處理與斷言
目錄:
1.異常處理
2.斷言(assert)
3.日誌模組(logging)
4.修改之前的車票資訊查詢,把日誌模組、異常處理加進去
1.異常處理
程式碼如下:
語法:
try:
pass#可能出現異常的語句
except Exception as e:#Exception 全部異常的通稱
print(e)
finally:#可選項,不管有沒有異常,finally裡面的語句都執行
pass
#python 異常處理 try: print("try:") s=input("input:") b=int(s) c=int(input("input2:")) s2=b/c id=int(input("id:")) print([1,2,3][id]) except ValueError as e1: print("ValueError:") print(e1) except ZeroDivisionError as e2: print("ZeroDivisionError:") print(e2) except Exception as e: print(e) finally:#不管有沒有異常,finally裡面的語句都執行 print("finally") print("自己定義錯誤提示".center(20,"*")) try: print("try:") s=input("input:") b=int(s) c=int(input("input2:")) s2=b/c id=int(input("id:")) print([1,2,3][id]) except ValueError: print("ValueError:") print("輸入的值不能轉換成整數:") except ZeroDivisionError: print("ZeroDivisionError:") print("被除數不能為0") except Exception as e: print(e) finally: print("finally")
2.斷言(assert)
如果沒有出錯,斷言語句不執行,不滿足條件,不往下走
執行加-O 忽略全部的斷言(不執行斷言)
#斷言assert print("斷言assert:") try: print("try:") a=input("input:") assert a.isdigit(),"輸入的a不合法!" b=int(a) assert b!=0,"除數不為0!" r=10/b print("result:",r) id=int(input("id:")) l=[1,2,3] assert id in range(len(l)),"索引超出範圍!" print(l[id]) except AssertionError as e: print(e) finally: #不管有沒有異常,finally裡面的語句都執行 print("finally")
3.日誌模組(logging)
常用日誌級別:info(通知)、debug(除錯)、error(錯誤)、warning(警告)、critical(嚴重錯誤)
#日誌模組logging import logging logging.basicConfig( #日誌級別 level=logging.DEBUG, #日誌格式 #時間、程式碼、行號、日誌級別、日誌資訊 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #日誌時間格式 #datefmt='%a, %d %b %Y %H:%M:%S', #日誌存放目錄 filename='logfile.log', #開啟日誌檔案的方式 filemode="a" ) logging.debug("這是一個除錯資訊") logging.info("這是一個通知資訊") logging.warning("這是一個警告資訊") logging.error("這是一個錯誤資訊") logging.critical("這是一個嚴重錯誤資訊")
4.修改之前的車票資訊查詢,把日誌模組、異常處理加進去
import requests import logging from prettytable import PrettyTable logging.basicConfig( #日誌級別 level=logging.DEBUG, #日誌格式 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #日誌存放目錄 filename='logfile.log', #開啟日誌檔案的方式 filemode="a" ) url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090" try: txt=requests.get(url).text except: print("網路未連線!") #print(txt) inf=txt[:-2].split("@")[1:] #print(inf) stations={} for record in inf: rlist=record.split("|") stations[rlist[2]]={"cn":rlist[1],"qp":rlist[3],"jp":rlist[4]}#把車站編碼當作key def getcode(t): while True: s1=input("%s站:"%t) r1=[] for id,station in stations.items(): if s1 in station.values(): r1.append((id,station)) if r1: break print("沒有這個車站!") print("請重新輸入!") if len(r1)==1: sid=r1[0][0] else: print("你輸入的條件比較模糊,請在以下站中進行選擇:") for i in range(len(r1)): print(i+1,r1[i][1]["cn"]) sel=int(input("你的選擇:"))-1 sid=r1[sel][0] return sid fromid=getcode("出發") toid=getcode("到達") fdate=input("出發日期(格式:2019-01-01):").strip() qurl=("https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT")%(fdate,fromid,toid) print(qurl) print("你輸入的查詢條件是:出發站:{},到達站:{}".format(fromid,toid)) ainf=requests.get(qurl).json()["data"]["result"] #json檔案儲存當前從出發站到目的站的所有車次的詳細資訊 result=[] gaotie=[] huoche=[] for i in ainf: list=i.split("|") checi=list[3] chufa=stations[list[6]]["cn"] mudi=stations[list[7]]["cn"] ftime=list[8] dtime=list[9] sw=list[32] yd=list[31] rw=list[23] yw=list[26] wuzuo=list[28] ed=list[30] yz=list[29] result.append((checi,chufa,mudi,ftime,dtime,ed,yz,wuzuo,yw,rw,yd,sw)) if checi[0] in ["G","D"]: gaotie.append([checi,chufa,mudi,ftime,dtime,sw,yd,ed]) else: huoche.append([checi,chufa,mudi,ftime,dtime,yz,yw,rw,wuzuo]) #print(result) while True: print("請輸入檢視資訊:1、全部2、高鐵、動車3、火車 4、退出") show=int(input("請選擇:")) if show==1: table=PrettyTable(["車次","出發站","目的站","發車時間","到達時間","商務座","一等座","二等座","硬座","硬臥","軟臥","無座"]) for i in result: table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11]]) print(table) elif show==2: table=PrettyTable(["車次","出發站","目的站","發車時間","到達時間","商務座","一等座","二等座"]) for i in gaotie: table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]]) print(table) elif show==3: table=PrettyTable(["車次","出發站","目的站","發車時間","到達時間","硬座","硬臥","軟臥","無座"]) for i in huoche: table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]]) print(table) elif show==4: print("查詢結束!") break else: print("輸入錯誤請重新輸入!")
日誌記錄檢視: