为什么从 Python 2 移植到 Python 3 时 ord() 会失败? [复制]

2023-12-24

我正在尝试移植一个名为的 Python 库英雄协议 https://github.com/Blizzard/heroprotocol从Python 2到Python 3。该库用于解析名为《风暴英雄》的在线游戏的重播文件,目的是从文件中获取数据(即谁与谁对战,他们何时死亡,游戏何时进行)结束,谁赢了,等等)。

看来这个库是为 Python 2 创建的,由于我使用的是 Python 3(特别是 Anaconda、Jupyter Notebook),我想将其转换为 Python 3。

我遇到的具体问题是当我跑步时

header = protocol.decode_replay_header(mpq.header['user_data_header']['content'])

应该获得有关重播文件的一些基本数据,我收到此错误:

TypeError: ord() expected string of length 1, but int found

我用谷歌搜索了ord()函数并找到了一些关于使用的帖子ord()在Python 3中,但他们都没有解决我遇到的问题。我也尝试过posting https://github.com/Blizzard/heroprotocol/issues/57在 Github 的“Issues”部分,但我还没有得到回复。

为什么我会看到这个错误?


根据issue https://github.com/Blizzard/heroprotocol/issues/57你提出的,异常发生在Decodes.py 第 69 行 https://github.com/Blizzard/heroprotocol/blob/master/decoders.py#L69:

self._next = ord(self._data[self._used])

这在 Python 2 中成功但在 Python 3 中失败的明显原因是:self._data是一个字节串。在 Python 2 中,字节串是“标准”字符串对象,因此索引一个字节串会返回该位置的字符(本身就是一个字符串)……

# Python 2.7
>>> b'whatever'[3]
't'

……并打电话ord() https://docs.python.org/2/library/functions.html#ord结果的表现符合预期:

>>> ord(b'whatever'[3])
116

然而,在Python 3中,一切都不同了 https://docs.python.org/3/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit:标准字符串对象是 Unicode 字符串,而字节串则是整数序列。因此,对字节串进行索引会直接返回相关整数......

# Python 3.6
>>> b'whatever'[3]
116

……如此呼唤ord() https://docs.python.org/3/library/functions.html#ord该整数没有意义:

>>> ord(b'whatever'[3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected string of length 1, but int found

所以,你应该能够防止specific您在这里询问的异常只需删除对ord()在那一行和类似的行上:

self._next = self._data[self._used]

…当然,结果可能会揭示更多问题(超出了这个问题的范围)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么从 Python 2 移植到 Python 3 时 ord() 会失败? [复制] 的相关文章

  • Python BS4 Scraper 仅返回每个页面的前 9 个结果

    我让这段代码按预期工作 只是它并没有完全按预期工作 一切似乎都很顺利 直到我检查了我的 csv 输出文件并注意到我每页只得到前 9 个结果 每页应该有 40 个结果 因此我得到的结果少于预期的 25 有什么想法吗 import reques
  • 无法在 python 中导入名称 GoogleMaps

    我使用下面的代码来获取地址的纬度和经度 from googlemaps import GoogleMaps gmaps GoogleMaps api key address Constitution Ave NW 10th St NW Wa
  • 防止脚本目录被添加到Python 3中的sys.path

    有没有办法阻止脚本的目录被添加到python3中的sys path 由于导入在 python 中是相对的 因此我遇到了导入冲突 我正在处理的一个遗留项目有一个名为logger py在与内置冲突的脚本的根目录中logger 我使用的自定义构建
  • 在 pandas 数据框中按列应用 Seaborn 热图

    我试图在枢轴熊猫数据帧上使用seaborn的热图 就像在超链接中一样有效 df pd DataFrame np random randint 1 100 size 3 2 df columns A B df sns heatmap df a
  • 如何为 apscheduler 指定“记录器”

    我正在尝试学习如何使用 Python 的 apscheduler 包 但它会定期抛出以下错误 No handlers could be found for logger apscheduler scheduler 该消息似乎与计划作业中的错
  • 如何使用scrapy抓取xml url

    你好 我正在使用 scrapy 来抓取 xml url 假设下面是我的 Spider py 代码 class TestSpider BaseSpider name test allowed domains www example com s
  • Twython - 如何使用媒体 url 更新状态

    在我的应用程序中 我允许用户在 Twitter 上发帖 现在我想让他们通过媒体更新他们的状态 In twython py我看到一个方法update status with media从文件系统读取图像并上传到 Twitter 我的图像不在文
  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • 根据两个预先计算的直方图报告两个样本的 K-S 统计量

    Problem 在这里 我绘制了存储在文本文件中的 2 个数据集 在列表中 dataset 每个包含 218 亿个数据点 这使得数据太大而无法作为数组保存在内存中 我仍然能够将它们绘制为直方图 但我不确定如何通过2 样本KS测试 http
  • 如何使用Python在没有窗口的情况下在屏幕上显示文本

    问题 我需要在没有窗口的情况下直接将文本写入屏幕 文本需要显示在所有其他窗口和全屏应用程序之上 并且不应以任何方式单击或交互 Example The text doesn t need to have a transparent backg
  • Python Raspberry pi - 如果路径不存在,则跳过循环

    我有一个收集温度 文本文件中的值 的功能 它使用部分预定义的路径 但是 有时如果温度传感器未加载 断开连接 则路径不存在 如果路径不可用 如何设置条件或例外来跳过循环 我想使用 continue 但我不知道要设置什么条件 def read
  • 通过Python通过蓝牙发送消息或数据

    如何通过 python 通过蓝牙发送消息 而无需输入数字等密钥身份验证 我用过 pybluez 但我收到了这个错误 File send line 12 in
  • 如何编辑 QProgressBar 的样式表

    我无法在我的应用程序中编辑进度条的颜色 仅编辑文本颜色 pyhton 3 9 PySide6 QT Creator 7 0 2 Python应用程序 https i stack imgur com 6hKFI png import sys
  • 在 Python 中快速确定小于 10 亿的数字是否为素数

    我目前在 python 中检查数字素数的算法对于 1000 万到 10 亿之间的数字来说速度很慢 我希望它能够得到改进 因为我知道我永远不会得到超过 10 亿的数字 背景是我无法获得足够快的实现来解决项目 Euler 的问题 60 我在 7
  • django REST框架多源领域

    假设我的 models py 中有这些 models py class Theme models Model An theme is an asset of multiple levels adventure models ForeignK
  • Unpivot Pandas 数据

    我目前有一个DataFrame布置为 Jan Feb Mar Apr 2001 1 12 12 19 2002 9 2003 我想将数据 逆透视 使其看起来像 Date Value Jan 2001 1 Feb 2001 1 Mar 200
  • 为什么计算大整数阶乘的“分而治之”方法如此快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Python 中将 .docx 转换为 .txt

    我想将大量 MS Word 文件转换为纯文本格式 我不知道如何在 Python 中做到这一点 我在网上找到了以下代码 我的路径是本地路径 所有文件名都类似于 cx xxx 即 c1 000 c1 001 c2 000 c2 001 等 fr
  • 将文本文件转换为 plink PED 和 MAP 格式

    我有以下数据 其中的一小部分 名为 short2 pre snp tumor txt rs987435 C G 1 1 1 0 2 rs345783 C G 0 0 1 0 0 rs955894 G T 1 1 2 2 1 rs608879
  • 从受密码保护的 Excel 文件到 pandas DataFrame

    我可以使用以下命令打开受密码保护的 Excel 文件 import sys import win32com client xlApp win32com client Dispatch Excel Application print Exce

随机推荐