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("輸入錯誤請重新輸入!")
日志記錄查看: