我有这样的陈述。
我只是想知道两个断言语句中的哪一个抛出异常。
try:
assert re.search("xyz", statement)
assert re.search("abc", statement)
except AssertionError:
print "AssertionError : Expected Error message not found"
感谢您的回答。
答案 0 :(得分:1)
如The assert statement文档中所述,您可以在断言测试表达式后给出表达式;第二个表达式将在AssertionError中传递。这是一个简单的演示:
for n in (-5, 10, 20):
try:
assert 0 <= n, '%d is too low' % n
assert n <= 10, '%d is too high' % n
print('%d is ok' % n)
except AssertionError as err:
print "AssertionError:", err
<强>输出强>
AssertionError: -5 is too low
10 is ok
AssertionError: 20 is too high
第二个表达式不必是字符串,它可以是任何东西。由于断言应仅用于验证程序逻辑,而不是用于验证用户数据,因此我通常不打算传递格式良好的字符串,我只是传递包含相关值的元组,也许是一个识别字符串。例如,
assert (a * b > c), ('Bad product', a, b, c)
答案 1 :(得分:1)
您可以使用traceback
模块中的功能。例如,extract_tb
返回表示堆栈跟踪条目的元组列表(在Python 3.5及更新版本中命名为元组)。每个元组都包含一个行号以及源文本行(如果可用)。
import traceback
try:
assert 1
assert None
except AssertionError as e:
for x in traceback.extract_tb(e.__traceback__, limit=-1):
print(x.lineno, repr(x.line)) # Prints 5 'assert None'
答案 2 :(得分:0)
您可以使用>>> import traceback
>>> try:
... a = 1 / 0
... except:
... traceback.print_exc()
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
打印上次引发的异常。一个例子:
traceback.format_exc()
如果您不想打印,还有HKStatisticsQuery
。
答案 3 :(得分:0)
也许您想要区分异常?然后Getting exception details in Python可以帮助您。 在这里复制答案:
import sys
try:
assert re.search("xyz", statement)
assert re.search("abc", statement)
except AssertionError:
type, value, traceback = sys.exc_info()
然后你可以打印出信息。