欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python异常处理与断言以及日志模块

程序员文章站 2022-03-10 09:53:24
python异常处理与断言 目录: 1.异常处理 2.断言(assert) 3.日志模块(logging) 4.修改之前的车票信息查询,把日志模块、异常处理加进去 1.异常处理 代码如下: 语法: try: pass #可能出现异常的语句 except Exception as e: #Except ......

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("输入错误请重新输入!")

日志记录查看:

python异常处理与断言以及日志模块