【问题标题】:psyco complains about unsupported opcode 54, what is it?psyco 抱怨不支持的操作码 54,它是什么?
【发布时间】:2009-10-29 20:13:49
【问题描述】:

Psyco 日志输出如下所示:

21:08:47.56  Logging started, 10/29/09                  %%%%%%%%%%%%%%%%%%%%
21:08:47.56  unsupported opcode 54 at create_l0:124                      % %
21:08:47.56  unsupported opcode 54 at create_lx:228                      % %

有问题的行

class File:
    def __init__(self, path, header):
        self.path = path
        self.header = header
        self.file = path + '/' + header.to_filename()
        self.pfile = None

    def add_entry(self, entry):                        # line 124
        self.pfile.write(entry.to_binary())

    def open(self):
        self.pfile = open(self.file, 'wb')
        self.pfile.write(self.header.to_binary())

    def close(self):
        self.pfile.close()

    def write(self, data):
        self.pfile.write(data)

下一个:

nat_file = File(target + '/' + name, nat_header)
nat_file.open()
# add first value
nat_file.add_entry(DataBlock(t, q, 0.0, 1, v))
# add all others
while True:
    try:
        t, v, q = f.next()
    except StopIteration:
        break
    nat_file.add_entry(DataBlock(t, q, 0.0, 1, v))
nat_file.close()                                     # line 228

我有点不知所措。有什么想法吗?

【问题讨论】:

    标签: python psyco


    【解决方案1】:

    使用数字查找操作码的名称其实很简单(下面使用 Ubuntu 上的 Python 2.6.2,你可能会得到不同的结果):

    >>> import dis
    >>> dis.opname[54]
    'STORE_MAP'
    

    当然,找出这究竟意味着什么完全是另一个问题。 :-)

    【讨论】:

    • 啊,这是找出什么是操作码的一种更简单的方法……我翻遍了Python/Lib/opcode.py,找到了def_op('STORE_MAP', 54)
    • 有了我找到的thomas.apestaart.org/log/?p=927 的信息,所以问题显然是 STORE_MAP 是 Python 2.6 中的新内容,可能不受 Psyco 支持。我想我会尝试用 python 2.5 运行我的程序,而不应该再发生这种情况了。
    【解决方案2】:

    您是否使用另一个 Psyco 版本进行编译而不是运行脚本?

    【讨论】:

    • 我不知道。我用 ubuntu 包管理器安装了 psyco。
    猜你喜欢
    • 1970-01-01
    • 2016-08-25
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2013-02-22
    相关资源
    最近更新 更多