Python调试

Python调试
使用try-except模块来处理python异常,这样程序就可以从预期的异常中恢复,也可以抛出异常,抛出异常使用raise语句。
raise语句包含:
raise关键字;
对Exception函数的调用;
传递给Exception函数的字符串,包含有用的出错信息。
经常是raise语句在函数中,try-exception在调用该函数的代码中
eg:
def boxprint(symbol,width,height):
If len(symbol)!=1:
raise Exception(‘Symbol must be a single character string’)
If width<=2:
raise Exception(‘Width must be greater than 2.’)
If height<=2:
raise Exception(‘Height must be greater than 2.’)
Print(symbol * width)
for i in range(height-2):
print(symbol+(‘’width-2)+symbol)
Print(symbol * width)
for sym,w,h in ((‘
’,4,4),(‘0’,20,5),(‘x’,1,3),(‘zz’,3,3)):
try:
boxPrint(sym,w,h)
Except Exception as err:
print(‘An exception happened:’+ str(err))
boxPrint函数,实现用symbol字符创建一个小盒子的图像。要求symbol是一个字符,宽度,高度要大于2,如果boxPrint返回一个Exception对象,这条语句就会将它保存在名为err的变量中,Exception对象可以传递给str(),将他转为字符串,得到用户友好的出错信息

如果python遇到错误,他就会生成一些错误信息,成为‘反向跟踪’,包含了出错消息,导致该错误的代码行号,以及导致该错误的函数调用的序列(这个序列称为调用栈),只要错误没被处理,即会显示反向跟踪。

断言:是一个完整性的检查,确保代码没有做什么明显错误的事情。
assert语句包含:assert关键字;
条件为True或False的表达式;
逗号;
当条件为False时显示的字符串。
eg:

Logging模块方便创建自定义的消息记录,这些日志消息将描述程序执行何时到达日志函数调用,并列出你指定的任何变量当时的值,缺失日志信息表明有一部分代码被跳过,从未执行。
要启用logging模块,在程序运行时将日志信息显示在屏幕上,将下方代码复制到程序顶部(但在python的#!行之下):
Import logging
logging.basicConfig(level=logging.DEBUG,format=’ %(asctime)s - %(levelname)s - %(message)s’)
Eg:
Import logging
logging.basicConfig(level=logging.DEBUG,format=’ %(asctime)s - %(levelname)s - %(message)s’)
Logging.debug(‘start of program’)
def factorial(n):
logging.debug(‘start of factorial(%s%%)’ % (n))
Total=1
for i in range(1,n+1):
total*=1
logging.debug(‘i is’+str(i)+’,total is’+str(total))
logging.debug(‘end of factorial(%s%%)’ % (n))
print(factorila(5))
logging.debug(‘end of program’)
使用logging.debug()函数来打印日志信息,它会调用basicConfig(),打印一行信息,这行信息是在basicConfig()函数中指定的,并且包含传递给debug()的消息。
日志级别:
DEBUG logging.debug() 最低级别,用于小细节,一般用于诊断问题
INFO logging,info() 用于记录程序中一般事件的信息,或确认一切正常工作
WARNING logging.warning 用于表示可能的问题,它不会阻止程序的工作,将来可能会
ERROR logging.error 用于记录错误,导致程序做某事失败
CRITICAL logging.critical 用于表示致命的错误,导致或将要导致程序完全停止工作
调试完程序后,logging.disable()函数可以禁用这些消息,就不必手动在程序中删除所有日志调用,eg:logging.disable(logging.DEBUG)。可向logging.basicConfig传递filename关键字参数eg:logging.basicConfig(filename=’mylog.txt’level=logging.DEBUG,format=’%(asctime)s - %(levelname)s - %(message)s’)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值