TL;DR:在 Python 2.x 中进行分析并在 Python 3.x 中查看配置文件时会发生此错误,反之亦然。
我有同样的问题。据我所知,RunSnakeRun 包尚未移植到 Python3。至少,我可以将它添加到 python2 而不是 python3 (SyntaxError)。此外,我认为cProfile 的输出格式在 python 2/3 之间不兼容。我没有花时间找到一个明确的确认,但是在cProfile 类 pstats.Stats(*filenames, stream=sys.stdout)的文档中,他们确实说“上述构造函数选择的文件必须已经创建由对应版本的 profile 或 cProfile。具体来说,不保证与此 profiler 的未来版本的文件兼容性,并且与其他 profiler 生成的文件不兼容。"。这似乎是您问题的根源。例如,我从 python3 制作了一个配置文件输出
import cProfile
cProfile.run('some code to profile', 'restats')
并尝试在 RunSnakeRun 中打开它并得到与您相同的 marsal 错误。此外,如果我这样做
import pstats
p = pstats.Stats('restats')
p.strip_dirs().sort_stats(-1).print_stats()
在 python3 中,它就像一个魅力。如果我在 python2 中执行此操作,则会出现 marshal 错误。现在,RunSnakeRun 在 python2 中执行(除非你找到了让它在 python3 中运行的方法)。所以,我的猜测是您已经在 python3 中执行了分析,并且正在使用依赖于 python2 的工具来分析它们,哪些工具期望输出与 python2 兼容。
RunSnakeRun 项目似乎暂时处于非活动状态(主页上的版权为 2005-2011)并且没有迹象表明它将被移植到 python3.... 也许考虑替代可视化工具可能是最好的方法如果你想在 Python3 中开发,适合你。pyprof2calltree与KCachegrind结合在 Linux 中对我来说效果很好。它可以提供与从 RunSnakeRun 获得的分析输出类似的可视化视图。