【问题标题】:ord() expected string, but int foundord() 预期字符串,但找到 int
【发布时间】:2021-08-11 19:45:53
【问题描述】:

我在ord() def 中遇到问题,我的代码如下:

def write(data):
    for block_idx in list(range(0, len(data), 10)):
        chksum = 0
        for byte_idx in list(range(block_idx, 2)):
            chksum += ord(data[byte_idx])


write(b'123')
TypeError: ord() expected string of length 1, but int found

【问题讨论】:

标签: python


【解决方案1】:

您正在向函数提供b'123',即字节,这就是为什么当您尝试获取特定位置的字节时,您会得到一个 int。当您将int 传递给ord() 时,会引发异常,因为:

给定长度为 1 的字符串,ord() 函数返回 表示字符的 Unicode 代码点的整数,当 参数是一个 Unicode 对象,或者当 参数是一个 8 位字符串。

用途:

chksum += ord(chr(data[byte_idx]))

【讨论】:

    【解决方案2】:

    正如 Python bytes 文档所述:

    虽然字节文字和表示基于 ASCII 文本,但 bytes 对象实际上表现得像不可变的整数序列

    b"123"[0] 被调用时,它会返回一个int,这是@devreddit 所述的内置ord 函数的无效参数。

    在这种情况下,您甚至不需要调用 ord:

    chksum += data[byte_idx]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2023-03-31
      • 2019-12-06
      • 1970-01-01
      相关资源
      最近更新 更多