如何解决SciPy';s handythread Python3.x的示例代码:raise中的无效语法错误?
SciPy网站有一个指向简单的如何解决SciPy';s handythread Python3.x的示例代码:raise中的无效语法错误?,python,multithreading,exception,python-3.x,Python,Multithreading,Exception,Python 3.x,SciPy网站有一个指向简单的平行地图的链接,它似乎非常方便地使用它所处的位置)。不幸的是,由于Python2和Python3的一些差异,代码在我的环境中不起作用 我得到的错误与raise语法有关: from handythread import parallel_map File "C:\Users\Ruben\Dropbox\Doctoraat\Python\handythread.py", line 55 raise a, b, c ^ Synta
平行地图的链接,它似乎非常方便地使用它所处的位置)。不幸的是,由于Python2和Python3的一些差异,代码在我的环境中不起作用
我得到的错误与raise
语法有关:
from handythread import parallel_map
File "C:\Users\Ruben\Dropbox\Doctoraat\Python\handythread.py", line 55
raise a, b, c
^
SyntaxError: invalid syntax
我找到了解释语法更改的文档,但我找不到一个简单的更改来实现这一点。有人知道该修什么吗?handythread中的相关片段如下:
for t in threadlist:
t.join()
if exceptions:
a, b, c = exceptions[0]
raise a, b, c
@justhalf的建议非常合理,但如果您想正确地执行,请按照本文中的说明进行操作(搜索“三个表达式raise语句将从转换而来”)。或者您可以通过2to3
运行脚本,该脚本将自动执行 在本例中,他们获取sys.exc_info()
元组并将其存储到异常
列表中:
e = sys.exc_info()
exceptions.append(e)
sys.exc_info()
返回(类型、值、回溯)
,因此您可以重新引发原始异常:
a, b, c = exceptions[0]
raise b
但我建议:
a, b, c = exceptions[0]
raise a(b).with_traceback(c)
这将保留完整、原始的回溯,并使代码的调试更加容易。如果这只是一个例外,您可以提出任何问题,对吗?有点黑客,但你的代码会运行。不管怎样,从文档来看,您似乎应该使用回溯(c)