You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cryptopals第1套第6题Python代码int不可调用及str异或报错求解

第一个报错(TypeError: 'int' object is not callable)原因

你在代码其他位置定义了名为sum的变量,覆盖了Python内置的sum()函数,导致hammingDistance中调用sum()时实际触发了对整数类型的调用,因此报错。
单独测试时该代码能正常运行,是因为单独测试场景下sum变量的定义位置在hammingDistance函数定义之后,函数调用的还是原生内置函数,因此没有触发冲突。

第二个报错(TypeError: unsupported operand type(s) for ^: 'str' and 'str')修复方案

该报错说明传入hammingDistance的两个参数实际为字符串类型,并非你预期的字节类型,排查和修复步骤如下:

  1. 避免使用sum作为变量名,同时可以简化汉明距离的计算逻辑,规避对sum函数的依赖:
def hammingDistance(binary_seq_1, binary_seq_2): # 计算两个字节串的汉明距离
    assert len(binary_seq_1) == len(binary_seq_2)
    dist = 0
    for b1, b2 in zip(binary_seq_1, binary_seq_2):
        diff = b1 ^ b2
        # 直接使用count方法统计1的个数,无需调用sum函数
        dist += bin(diff).count('1')
    return dist
  1. 检查createChunks函数的调用逻辑,确认传入的参数确实是b64decode返回的字节类型密文,避免在分片过程中意外将字节转换为字符串。
  2. 若需要进一步定位类型异常,可以在函数开头增加类型校验逻辑:
def hammingDistance(binary_seq_1, binary_seq_2):
    # 新增类型校验,参数类型不符合时直接抛出明确报错
    assert isinstance(binary_seq_1, bytes) and isinstance(binary_seq_2, bytes), "参数必须为字节类型"
    assert len(binary_seq_1) == len(binary_seq_2)
    # 剩余逻辑不变

内容的提问来源于stack exchange,提问作者NotQuiteSo1337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:09:03