python打印异常信息
‘壹’ python中的testresult怎么用
TestResult方法介绍
1. printErrors
作用:被TestRunner在执行玩测试内容的时候调用,打印错误信息,默认不输出任何信息
输入参数:无
输出参数:无
返回值:无
2. startTest(self, test)
作用:在每个测试条目执行测试之前被调用,将测试条目个数加一,设置_mirrorOutput为False ,最后根据buffer参数,设置 sys.stderr 和sys.stdout,
输入参数:test 测试用例类的实例化对象
输出参数:
返回值:
3. startTestRun
作用: 在runner开始执行测试用例之前被调用,默认不执行内容,和startTest不同,startTest是在Testcase子类调用。
输入参数:无
输出参数:无
返回值:无
4. stopTest (self, test)
作用: 在测试用例执行测试条目之后被调用,如果处于buffer状态,并且mirrorOutput为真,即测试条目执行失败或异常,则将原来缓存的数据进行输出。然后将缓存数据清空,并_mirrorOutput置为False
输入参数:test 测试用例类的实例化对象
输出参数:无
返回值:无
5 stopTestRun
作用: 在runner执行完所有的测试用例后被调用,默认不执行内容,和stopTest不同,stopTest是在Testcase子类调用。
输入参数:无
输出参数:无
返回值:无
6. addError(self, test, err)
作用: 在测试用例类执行完测试条目错误或异常后被调用,
输入参数:test 测试用例类的实例化对象
Err 是根据sys.exc_info()返回的对象, 是一个三元组,(exctype, value, tb) exctype是异常类型,value 是具体的异常数据,tb 是traceback的内容
输出参数:无
返回值:无
7. addFailure(self, test, err)
作用:在测试用例类执行完测试条目失败后被调用,,默认不执行内容,和stopTest不同,stopTest是在Testcase子类调用。
输入参数:test 测试用例类的实例化对象
Err 是根据sys.exc_info()返回的对象, 是一个三元组,(exctype, value, tb)
exctype是异常类型,value 是具体的异常数据,tb 是traceback的内容,如果处在buffer
为真的情况下,还还会将当前的sys.stdout 和sys.stderr的内容也一并合并保存在failture的成员变量列表中的字符串内容中。
输出参数:无
返回值:无
8. addError (self, test, err)
作用:在测试用例类执行完测试条目失败后被调用,,默认不执行内容,和stopTest不同,stopTest是在Testcase子类调用。
输入参数:test 测试用例类的实例化对象
Err 是根据sys.exc_info()返回的对象, 是一个三元组,(exctype, value, tb)
exctype是异常类型,value 是具体的异常数据,tb 是traceback的内容,如果处在buffer
为真的情况下,还还会将当前的sys.stdout 和sys.stderr的内容也一并合并保存在error的成员变量列表中的字符串内容中。
输出参数:无
返回值:无
9. addSuccess (self, test)
作用:在测试用例类执行完测试条目成功后被调用,,默认不执行内容
输入参数:test 测试用例类的实例化对象
输出参数:无
返回值:无
10. addSkip( self, test, reason):
作用:在测试用例类执行的测试条目被skip后被调用,将该条目添加到 skipped 列表中
输入参数:test 测试用例类的实例化对象 reson 是skip的原因
输出参数:无
返回值:无
11. addExpectedFailure (self, test, err):
作用:在测试用例类执行的测试条目期望的失败发生后被调用,将该条目添加到expectedFailures列表中
输入参数:test 测试用例类的实例化对象 err是 该失败的情况
输出参数:无
返回值:无
12. addUnexpectedSuccess (self, test):
作用:在测试用例类执行的测试条目期望的失败发生后被调用,将该条目添加到expectedFailures列表中
输入参数:test 测试用例类的实例化对象 err是 该失败的情况
输出参数:无
返回值:无
13. wasSuccessful
作用:通过判断failures和errors列表是否为空,判断所有测试条目是否执行成功
输入参数: 无
输出参数:无
返回值:无
14. stop
作用: shouldStop设置为True,用于终止测试
输入参数: 无
输出参数:无
返回值:无
15. _exc_info_to_string (self, err, test):
作用: 将err 异常数据整理成字符串,并且如果有buffer为真,将sys.stdout 和sys.stderr的数据也添加到返回的字符串中
输入参数: 无
输出参数:无
返回值:字符串
16. _is_relevant_tb_level(self, tb):
作用: 将err 异常数据整理成字符串,并且如果有buffer为真,将sys.stdout 和sys.stderr的数据也添加到返回的字符串中
输入参数: 无
输出参数:无
返回值:字符串
17. _count_relevant_tb_levels(self, tb):
作用: 获取traceback的层次数
输入参数: 无
输出参数:无
返回值:traceback的层次数
18, __repr__
作用: 返回一个显示测试项执行的数目以及测试失败的条目和异常的条目的个数。
输入参数: 无
输出参数:无
返回值:字符串
注释:
addError和addFailure 以及
addUnexpectedSuccess 函数 都有装饰器@failfast,有了该装饰器,则在实际调用 上述三个函数的时候,都会被封装一层 ,额外添加的功能就是会被用在发生错误或失败的时候停止测试。
def failfast(method):
@wraps(method)
def inner(self, *args, **kw):
if getattr(self, 'failfast', False):
self.stop()
return method(self, *args, **kw)
return inner
‘贰’ 多进程环境python logging打印日志混乱问题
解决办法如下:
多么痛的领悟,困扰了这么久的问题其实就是一个参数配置错了。
fileMode:表示日志文件的打开方式。w-直接写,使用这个配置当系统重启的时候日志会清空,一个进程打开后其他进程是无法使用的;a-尾部追加,大家都可以打开往文件结尾进行追加写入。
本人主语言是java,转到python后日志这块踩了几个坑。再说说另外一个坑,就是异常堆栈的打印问题,在java中logger是可以使用error直接打印出来的。在python中error跟其他日志记录方法没太大差别,是无法打印异常堆栈的,打印堆栈请使用 logger.exception("异常说明", e) 。
‘叁’ python 怎么打印异常
try:
#你认为会出异常的代码
exceptException,e:
#异常的堆栈信息
printe
#如果需要抛出异常
raisee
‘肆’ python中的raise前的print打印没有显示
在 Python 中,raise 语句用于抛出一个异常。在 raise 语句之前的 print 语句会在抛出异常之前执行,如果你在使用 raise 语句时发现 print 语句没有显示,销敬那么可能是因为 raise 语句之后的代码没有被执行。局斗激
举个例子,如果你有如下代码:
def foo():
print("before raise")
raise Exception("error")
print("after raise")
foo()
那么在执行 foo 函数时,会先打印 "before raise",然后抛出 Exception 异常,因此 "after raise" 不会被打印出来。
如果你希望在抛出异常之前打印出相应的信息,建议使用 try-except 语句来捕获异常,在 except 块中打印信息。这样,就可以保证在抛出异常之前,所有的代码都会被执行。
例如,可以使桐袜用如下代码来捕获异常:
def foo():
try:
print("before raise")
raise Exception("error")
print("after raise")
except Exception as e:
print("error:", e)
foo()
在这种情况下,执行 foo 函数时会先打印 "before raise",然后抛出 Exception 异常,最后打印 "error: error"。
‘伍’ Python 异常处理总结
什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。
异常处理: 本站Python教程会具体介绍。
断言(Assertions):本站Python教程会具体介绍。
异常处理
捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法:
以下为简单的try….except…else的语法:
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
· 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
· 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
· 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
实例
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:
以上程序输出结果:
实例
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:
以上程序输出结果:
使用except而不带任何异常类型
你可以不带任何异常类型使用except,如下实例:
以上方式try-except语句捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。
使用except而带多种异常类型
你也可以使用相同的except语句来处理多个异常信息,如下所示:
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
实例
如果打开的文件没有可写权限,输出如下所示:
同样的例子也可以写成如下方式:
当在try块中抛出一个异常,立即执行finally块代码。finally块中的所有语句执行后,异常被再次提出,并执行except块代码。参数的内容不同于异常。
异常的参数
一个异常可以带上参数,可作为输出的异常信息参数。你可以通过except语句来捕获异常的参数,如下所示:
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。
实例
以下为单个异常的实例:
以上程序执行结果如下:
触发异常
我们可以使用raise语句自己触发异常
raise语法格式如下:
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是”None”。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
实例
一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。
定义一个异常非常简单,如下所示:
注意:为了能够捕获异常,”except”语句必须有用相同的异常来抛出类对象或者字符串。
例如我们捕获以上异常,”except”语句如下所示:
用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
在你定义以上类后,你可以触发该异常,如下所示:
来源 | 脚本之家 原文链接:http://www.jb51.net/article/47996.htm
‘陆’ python中异常处理的使用方法
8.3. 异常处理
通过编程处理选择的异常是可行的。看一下下面的例子:它会一直要求用户输入,直到输入一个合法的整数为止,但允许用户中断这个程序(使用 Control-C 或系统支持的任何方法)。注意:用户产生的中断会引发一个 KeyboardInterrupt 异常。
>>> while True:
... try:
... x = int(input("Please enter a number: "))
... break
... except ValueError:
... print("Oops! That was no valid number. Try again...")
...
try 语句按如下方式工作。
首先,执行 try 子句 (在 try 和 except 关键字之间的部分)。
如果没有异常发生, except 子句 在 try 语句执行完毕后就被忽略了。
如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。
如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的except子句。然后继续执行 try 语句之后的代码。
如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。
如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。
一个 try 语句可能包含多个 except 子句,分别指定处理不同的异常。至多只会有一个分支被执行。异常处理程序只会处理对应的 try 子句中发生的异常,在同一个 try 语句中,其他子句中发生的异常则不做处理。一个 except 子句可以在括号中列出多个异常的名字,例如:
... except (RuntimeError, TypeError, NameError):
... pass
最后一个 except 子句可以省略异常名称,以作为通配符使用。你需要慎用此法,因为它会轻易隐藏一个实际的程序错误!可以使用这种方法打印一条错误信息,然后重新抛出异常(允许调用者处理这个异常):
‘柒’ python初学者Traceback (most recent call last):
1、打开Python开发工具IDLE,新建‘myexcept.py’文件,并写代码如下:
classmyException(Exception):
def__init__(self,error):
self.error=error
def__str__(self,*args,**kwargs):
returnself.error
这就是自定义定义的异常类,继承自Exception父类,有error字段,__str__函数的作用是打印对象时候,显示的字符串。