Python:断言不会打印出错误消息

时间:2019-05-11 18:53:22

标签: python assert

我在多线程环境中使用断言来帮助我捕获早期的错误。但是事实证明,当断言失败时,python3.7只是默默地终止,而不会输出我想看到的错误消息。感谢您的提前帮助。

这是示例代码:

from concurrent.futures import ThreadPoolExecutor
import threading
import random
from time import sleep
def task():
    assert False, "no assertion output, why?"
    print("Executing our Task")
    sleep(5)
    result = 0
    i = 0
    for i in range(10):
        result = result + i
    print("I: {}".format(result))
    print("Task Executed {}".format(threading.current_thread()))

if __name__ == '__main__':
    executor = ThreadPoolExecutor(max_workers=3)
    task1 = executor.submit(task,1)
    task2 = executor.submit(task,1)
    #task(), directly calling and the assertion failure message will be printed out.

我使用命令python3.7 test.py

来运行它

我认为我以错误的方式使用了python断言,因为我认为它是c ++中的断言函数。如果我将断言更改为引发异常,则上面的代码也不会打印。我应该抓住例外吗?

BTW,直接调用它,并显示断言失败消息。

1 个答案:

答案 0 :(得分:3)

问题在于您要检索期货(将返回值分配给task1task2),但不对其进行任何操作。尝试这样的事情。

for future in futures.as_completed([task1, task2]):
    if future.exception() is not None
        # Process the results here.

这将删除您当前的比赛。