【问题标题】:unsupported operand type(s) for +=: 'NoneType' and 'str' winappdbg error after cx_freeze+= 不支持的操作数类型:cx_freeze 后出现“NoneType”和“str”winappdbg 错误
【发布时间】:2014-03-10 12:01:19
【问题描述】:

我使用 cx_freeze 冻结我的 myScript.py 脚本,它在我的英文版 win7 x64 上运行良好,但在 cx_freeze 之后,在中文版 win7 x64 上,它显示以下错误消息。我在一个干净安装的英文 win7 x64 在一个 vm 上运行了相同的冻结代码,没有发生错误。

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
  File "myScript.py", line 2, in <module>
  File "myScript.pyx", line 62, in init myScript (myScript.c:23212)
  File "C:\Python27\lib\site-packages\winappdbg\__init__.py", line 234, in <module>
  File "C:\Python27\lib\site-packages\winappdbg\breakpoint.py", line 66, in <module>
  File "C:\Python27\lib\site-packages\winappdbg\process.py", line 58, in <module>
  File "C:\Python27\lib\site-packages\winappdbg\disasm.py", line 631, in <module>
  File "C:\Python27\lib\site-packages\winappdbg\disasm.py", line 651, in Disassembler
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str'

然后我在winappdbg代码中检查了文件disasm.py,在那一行,代码是

# Add the list of supported disassemblers to the docstring.
__doc__ += "\n"
for e in engines:
__doc__ += " - %s - %s (U{%s})\n" % (e.name, e.desc, e.url)
del e

我想如果我更改这行代码,并重新 cx_freeze 我的代码,错误可能会消失。 但是为什么__doc__ 在这里没有?它不是包的文档字符串,而且总是有一些东西吗?

【问题讨论】:

  • 使用优化标志字节编译的 Python 代码去除了文档字符串。但我不确定冻结的 exe 在两台计算机之间移动会如何改变。

标签: python pywin32 cx-freeze docstring


【解决方案1】:

正如 Thomas K 在评论中指出的那样,冻结的 Python 代码通常经过优化并且不包含文档字符串。 WinAppDbg 根本就不是为那个用例设计的,所以你必须在那里(可能在更多的地方)修补它。

如果你碰巧制作了那个补丁,请告诉我,以便我可以合并它:)

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 2018-07-07
    • 2023-01-04
    • 2017-07-11
    • 2015-09-21
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多