【发布时间】:2013-10-19 00:35:29
【问题描述】:
使用 concurrent.futures 的示例(2.7 的反向移植):
import concurrent.futures # line 01
def f(x): # line 02
return x * x # line 03
data = [1, 2, 3, None, 5] # line 04
with concurrent.futures.ThreadPoolExecutor(len(data)) as executor: # line 05
futures = [executor.submit(f, n) for n in data] # line 06
for future in futures: # line 07
print(future.result()) # line 08
输出:
1
4
9
Traceback (most recent call last):
File "C:\test.py", line 8, in <module>
print future.result() # line 08
File "C:\dev\Python27\lib\site-packages\futures-2.1.4-py2.7.egg\concurrent\futures\_base.py", line 397, in result
return self.__get_result()
File "C:\dev\Python27\lib\site-packages\futures-2.1.4-py2.7.egg\concurrent\futures\_base.py", line 356, in __get_result
raise self._exception
TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'
字符串"...\_base.py", line 356, in __get_result" 不是我希望看到的端点。是否可以获得引发异常的真实线路?比如:
File "C:\test.py", line 3, in f
return x * x # line 03
在这种情况下,Python3 似乎显示了正确的行号。为什么python2.7不能?有什么解决方法吗?
【问题讨论】:
-
我也在寻找这个问题的答案。谢谢!
标签: python python-2.7 concurrency concurrent.futures