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("输入错误请重新输入!")
日志记录查看:

python异常处理与断言以及日志模块的更多相关文章
- python异常处理和断言
http://blog.csdn.net/pipisorry/article/details/21841883 关于异常处理有必要么的讨论 最重要的问题是你在开发过程中隐藏了bug,如果当时你没加这个 ...
- (69)Python异常处理与断言
http://blog.csdn.net/pipisorry/article/details/21841883 断言 断言是一句必须等价于布尔真的判定;此外,发生异常也意味着表达式为假.这些工作类似于 ...
- Python(2.7.6) 标准日志模块的简单示例
Python 标准库中的 logging 模块提供了一套标准的 API 来处理日志信息的打印. import logging logging.basicConfig( level = logging. ...
- Python(2.7.6) 标准日志模块 - Logging Handler
Python 标准日志模块使用 Handler 控制日志消息写到不同的目的地,如文件.流.邮件.socket 等.除了StreamHandler. FileHandler 和 NullHandler ...
- python 自动化之路 logging日志模块
logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511 ...
- Python 全栈开发九 日志模块
日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...
- 【python接口自动化】- logging日志模块
前言:我们之前运行代码时都是将日志直接输出到控制台,而实际项目中常常需要把日志存储到文件,便于查阅,如运行时间.描述信息以及错误或者异常发生时候的特定上下文信息. logging模块介绍 Pyth ...
- 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging
Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...
- python异常处理、断言
异常处理基本语法 捕获异常 try: 语句1 语句2 ... except ERRNAME as e: print(e) #尝试执行语句,捕获到ERRNAME异常时打印异常信息e 捕获多个异常 try ...
随机推荐
- python捕获Ctrl+C信号
我们希望当服务器接收到一个 SIGTERM 信号时能够自动关机,或者做一些善后的操作,以下是实现的方法 import signal # 自定义信号处理函数 def my_handler(signum, ...
- pip/pip3更换国内源
pip/pip3更换国内源 用途:pip更换为国内源,可以大大的提高安装成功率和速度. Windows更换pip/pip3源 打开目录:%appdata% 新增pip文件夹,新建pip.ini文件 给 ...
- 解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2
前言 本篇讲述枚举和名称空间. 01 枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型.使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护. 我们对比枚举的定义和类的定义,会发 ...
- meterpreter持久后门
meterpreter持久后门 背景:meterpreter好是好,但有个大问题,只要目标和本机连接断开一次后就再也连不上了,需要再次用exploit打才行!!! 解决方案:在与目标设备的meterp ...
- MySQL之实现Oracle中的rank()函数的功能
假设表格为student, 数据如下: 我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...
- Nmap 命令操作详解
首先在安装nmap 稳定版 https://nmap.org/download.html 选择安装目录 通过cmd 去使用也可以在 安装目录中找到 进行可视化操作 以下是nmap 命令 -sT TC ...
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...
- WarShall算法
1.引言 图的连通性问题是图论研究的重要问题之一,在实际中有着广泛的应用.例如在通信网络的联通问题中,运输路线的规划问题等等都涉及图的连通性.因此传递闭包的计算需要一个高效率的算法,一个著名的算法就是 ...
- Java中的方法重载与方法重写
重载(overload) 重载是在一个类中,同名方法拥有不同的参数列表则视为重载.不同的参数列表包括:参数数量不同,参数类型不同,参数顺序不同.重载对于返回类型没有要求,所以不能通过返回类型去判断是否 ...
- 博弈之——SG模板
很久没搞博弈了.先来写个模板: 现在我们来研究一个看上去似乎更为一般的游戏:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负.事实上,这个游戏可以 ...