0

SciPy 网站有一个简单的链接,parallel_map使用起来非常方便,位于此处)。不幸的是,由于 Python 2 与 3 的一些差异,代码在我的环境中不起作用。

我得到的错误与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
4

2 回答 2

2

在示例中,他们获取sys.exc_info()元组并将其存储到exceptions列表中:

e = sys.exc_info()
exceptions.append(e)

sys.exc_info()return (type, value, traceback),因此您可以重新引发原始异常:

a, b, c = exceptions[0]
raise b

但我建议这样做:

a, b, c = exceptions[0]
raise a(b).with_traceback(c)

这将保留完整的原始回溯,并使代码的调试更加容易。

于 2013-09-18T09:34:34.887 回答
0

@justhalf 的建议是相当合理的,但如果您想正确执行,请按照此PEP中的说明进行操作(搜索“将转换为三表达式 raise statements”)。或者您可以运行2to3将自动执行此操作的脚本。

于 2013-09-18T09:34:23.357 回答