Python:"yield from" 会产生语法错误

4
我正在使用Ubuntu 16.04上的Njissen Gaston频繁子图挖掘实现,并尝试在Python 3.6.5和2.7.15rc1上运行。在执行程序时,我收到一个

错误提示。
Traceback (most recent call last):
  File "/home/elias/.local/bin/gaston", line 11, in <module>
    load_entry_point('gaston-py==0.1', 'console_scripts', 'gaston')()
  File "/home/elias/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 484, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/elias/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2725, in load_entry_point
    return ep.load()
  File "/home/elias/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2343, in load
    return self.resolve()
  File "/home/elias/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2349, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/elias/.local/lib/python2.7/site-packages/gaston_py/gaston.py", line 5, in <module>
    import gaston_py.factory as factory
  File "/home/elias/.local/lib/python2.7/site-packages/gaston_py/factory.py", line 7, in <module>
    import gaston_py.embedding as embedding
  File "/home/elias/.local/lib/python2.7/site-packages/gaston_py/embedding.py", line 70
    yield from _create_embedding_list(graph, visited, neighbor_id)
             ^
SyntaxError: invalid syntax

yield from _create_embedding_list(graph, visited, neighbor_id)

产生错误的代码块:

def _create_embedding_list(graph, visited, node_id):
    for edge_label, neighbor_label, neighbor_id in sorted(_neighbor_labels(graph, visited, node_id)):
        if (node_id, neighbor_id) not in visited:
            visited.add((node_id, neighbor_id))
            visited.add((neighbor_id, node_id)) # if graph is undirected

            yield node_id, (edge_label, neighbor_label)
            yield from _create_embedding_list(graph, visited, neighbor_id)

由于这是官方实现,我怀疑可能存在不兼容或类似的问题。我该如何运行此代码?感谢任何建议!


2
请发布完整的错误消息,包括至少行和位置指示器。请注意,您粘贴的代码缩进“for”不正确 - 修复此问题将使代码在Python 3.7.0上不会引发错误。 - MisterMiyagi
1
缩进明显有误,请[编辑]您的问题,不仅要删除明显的语法错误,还要确保您发布的代码完全是您遇到问题的代码。 - tripleee
2
请注意,yield from 是 Python3 中的特性。您的 traceback 是来自 python2,请提供一个来自 python3 的 traceback。 - MisterMiyagi
你如何运行这个程序?你是调用“gaston”,“/home/elias/.local/bin/gaston”,还是“python3 /home/elias/.local/bin/gaston”? - MisterMiyagi
错误现在是_DistributionNotFound_ File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 778, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'gaston-py==0.1' distribution was not found and is required by the application。谢谢,它现在使用Python3。现在我必须弄清楚如何找到gaston-py分发。 - Elias
显示剩余2条评论
1个回答

10

如回溯所示,您正在运行Python 2.7中的此代码。但是yield from是在Python 3.3中引入的,在早期版本上不受支持。


答案提到他也在Python 3.6.5上尝试过,但没有展示出回溯信息。 - MisterMiyagi
我设置了一个别名,让Python调用Python3,但它仍然使用Python 2.7。用户没有调用Python,但显然是一个C++脚本在调用。如何强制使用Python3.x? - Elias
2
我不知道,你需要发布一些关于C++脚本如何调用Python的详细信息。 - Daniel Roseman
在查看了C++代码后,很遗憾我无法确定C++代码如何编译成Python2.7。在项目文件中使用Ctrl+F搜索Python(和类似的关键词)并没有找到任何结果。在安装过程中,我严格按照README中的说明进行操作,只运行了make命令和gaston命令。 - Elias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接