【问题标题】:Can't solve "SystemError: unknown opcode"无法解决“SystemError: unknown opcode”
【发布时间】:2022-08-10 04:22:05
【问题描述】:

我正在笔记本电脑上执行笔记本,但出现以下错误。

XXX lineno: 17, opcode: 120
---------------------------------------------------------------------------
SystemError                               Traceback (most recent call last)
Input In [3], in <cell line: 3>()
      1 gym = Gym(0, 0, 0, 0).from_dill(BACKUP)
      2 ticker = gym.api.returnTicker()
----> 3 gym.wallet = gym.get_wallet()
      4 plot_donut_gym_wallet(gym)
      5 plot_donut_gym_wallet_makers(gym)

File <ipython-input-3-1c4842a503bf>:17, in get_wallet(self)

SystemError: unknown opcode

如您所见,错误发生在函数调用期间。函数本身不是问题,如果我在单元格内定义并运行它,它就可以正常工作。但是从它自己的模块中导入函数会导致这个错误。 我环顾四周寻找提示,我读过的所有论坛都指向安装多个 Python 的一些问题。 但是,我尝试使用新环境,同时使用 venv 和 conda,但我得到了同样的错误。其他机器上的相同代码可以工作,所以它似乎与我的特定安装有关,但我不知道如何修复它。我尝试重新安装 conda,制作新环境,升级 python。使用 Python 3.8、3.9 和 3.10 对此进行了迭代,我总是遇到同样的错误。非常欢迎任何帮助。

由于该函数来自先前使用dill 序列化的类,因此这个与莳萝相关的问题可能与https://github.com/uqfoundation/dill/issues/438 有关

  • 您能否展示您为创建虚拟环境所做的所有步骤以及输出,以便更清楚您的情况。另外,您使用什么操作系统?
  • 我只是使用 conda create -n myenv python=3.10 更改 python 版本。我在 MacOS 11.6.7 上。你指的是哪个输出?
  • 我指的是你在终端中输入的每一个命令,从创建虚拟环境开始,到上面提到的 SystemError 结束。否则很难估计实际发生了什么或如何解决这个问题。
  • 我创建了环境,然后在该环境中运行 jupyter notebook conda activate myenv,然后是 jupyter notebook。我运行笔记本的单元格,当调用gym.get_wallet() 函数时出现发布的错误。问题是,错误与函数本身无关,而是涉及操作码的 SystemError。
  • 如果这些确实是您执行的所有步骤,那么这就是问题的提示。据我所知,全新的 conda 环境没有预装 jupyter,所以如果你设法运行 jupyter notebook 而无需事先安装它,那么它很可能是指在你的恰好在PATH 上的系统。您可以检查笔记本内的import sys; print(sys.executable) 以验证它所指的内容。

标签: python opcode dill system-error


【解决方案1】:

使用dill 序列化的代码对象(来自函数和类方法)不能保证在不同的 Python 版本中工作,因为有效的操作码列表会随着版本的变化而变化。在解释器反序列化(“unpickling”)代码对象的操作码未知的情况下,函数和类会成功重新创建,但无法像您的示例中那样执行。

您示例中的代码可能是在 Python 2 或 Python 3.11 beta 中创建的……仅通过查看是不可能知道的。您应该询问创建泡菜文件的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2014-12-23
    • 2017-08-18
    • 2021-05-15
    • 2018-06-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多