python3的raise有traceback这个参数吗?如果有的话怎么用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3的raise有traceback这个参数吗?如果有的话怎么用?相关的知识,希望对你有一定的参考价值。

我百度看到有人是这样写出来的:raise [Exception [, args [, traceback]]],但是实际上好像没有这个参数。
我想写一个新的断言用于我的自动化测试,如果断言失败则raise触发异常,并将错误行输出到屏幕(可以点击跳转的那种),然后返回指定的值,如“测试不通过”等等
拿到返回值我会写入到Excel里面,请问各位这样需要怎么写?

这个实际上是没有这个参数的,只不过有很多人在虚构出来的。 参考技术A 没有这个参数的,如果有的话跟他说的时候,可以来对照说明书去进行使用。 参考技术B 这个参数肯定是有的,如果这种参数在使用的过程可能会相对比较少一点。 参考技术C PVC3的话,一般这个参数的话,一般就是按正常一个数值去使用的。 参考技术D raise Exception ("自己的字符串")

手动抛出自己想要的异常
import traceback

msg = traceback.format_exc ()
print(msg)追问

不加异常处理的话raise下面的代码就不会执行了,不过这是一个好办法,谢谢

另外我还有一个问题,就是能不能把调用断言的地方也一起输出到屏幕?如下图(图1):

在提问之前我其实试过traceback的print_exc(),但是它输出的跳转链接没有上图红框的信息,而是如下图(图2)一样:

断言失败需要输出调用断言的位置才有意义,如果只输出raise语句的位置,那我要找出断言失败的位置也是个麻烦

追答

你可以try  catch  捕捉自己抛出的异常  对它进行处理

traceback的print_exc()  是捕获到详细的错误信息  方便日志保存 也可以自己查看  你也可以print

追问

我的意思是将if __name__ == 'main'里面的代码封装成断言函数,然后去调用它,在断言失败的时候,输出调用断言的位置,并继续执行后面的代码,这样我才可以在测试脚本结束运行的时候知道是哪里的断言出错了。
但是现在的情况是,断言失败后,输出的错误信息里面没有我想要的,如果按照你刚刚发的截图那样,我就必须在每个断言的位置加上try,这样的话就会很麻烦了

追答

在断言失败的时候,输出调用断言的位置,

这个断言的位置就是line 18, in <module>这种消息吗

你发给我个例子,你到底想要什么样的消息

追问

def new_assert(value):
import traceback
if not value:
try:
raise AssertionError('错误')
except AssertionError:
msg = traceback.format_exc()
print(msg)
print('执行raise后面的代码')
new_assert(1 == 2)

本回答被提问者采纳

以上是关于python3的raise有traceback这个参数吗?如果有的话怎么用?的主要内容,如果未能解决你的问题,请参考以下文章

python3 异常处理

raise 真的是一个关键词吗?

Python3中raise用法

Python2和Python3中raise Exception

Python3基础 raise 产生RuntimeError 异常

Python异常处理