我在多线程环境中使用断言来帮助我捕获早期的错误。但是事实证明,当断言失败时,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,直接调用它,并显示断言失败消息。
答案 0 :(得分:3)
问题在于您要检索期货(将返回值分配给task1
和task2
),但不对其进行任何操作。尝试这样的事情。
for future in futures.as_completed([task1, task2]):
if future.exception() is not None
# Process the results here.
这将删除您当前的比赛。