【问题标题】:I'm getting 'int' object is not subscriptable我得到'int'对象不可下标
【发布时间】:2020-06-11 19:09:57
【问题描述】:

我是 python 新手,起初我正在尝试为我的项目实现代码,我的错误代码是 'int' 类型的对象没有 len() 这是我的代码并添加了 str 来解决问题

xored_value = ord(Mblocks[i%len(Mblocks)]) ^ ord(Cblocks[i%len(Cblocks)])

现在我得到'int'对象如果在这一行中是不可下标的

xored_value = ord(Mblocks[i%len(str(Mblocks))]) ^ ord(Cblocks[i%len(str(Cblocks))])

如果我把它改成

xored_value = ord(Mblocks(i%len(str(Mblocks)))=)) ^ ord(Cblocks(i%len(str(Cblocks))))

我收到'str' object is not callable

这是我的全部功能:

def xor_two_str(Mblocks,Cblocks):
    xored = []
    for i in range(max(len(str(Mblocks)), len(str(Cblocks)))):
        xored_value = ord(Mblocks[i%len(str(Mblocks))]) ^ ord(Cblocks[i%len(str(Cblocks))])
        xored.append(hex(xored_value)[2:])
    return ''.join(xored)

有什么帮助吗?

【问题讨论】:

  • 什么是 Mblocks 和 Cblocks?它们是字符串列表还是字符串本身?由于它没有 len 属性,我假设它不是这些。能否提供 Mblocks 和 Cblocks 的输入示例?
  • 这能回答你的问题吗? "TypeError: 'int' object is not subscriptable"

标签: python


【解决方案1】:

所以,我确定您传递的 Mblocks 和 Cblocks 参数是整数。由于它是一个整数,如果你尝试对它的一部分进行切片,你会得到 TypeError

> 100[1]
TypeError: 'int' object is not subscriptable

让我们逐个检查。 在第一种方法中:

> xored_value = ord(Mblocks[i%len(Mblocks)]) ^ ord(Cblocks[i%len(Cblocks)])

> error1 = len(Mblocks)
TypeError: object of type 'int' has no len()

由于Mblocks是整数,整数没有len函数

在更改 2 中, 你纠正了第一个错误,但是:

> xored_value = ord(Mblocks[i%len(str(Mblocks))]) ^ ord(Cblocks[i%len(str(Cblocks))])

> error2 = Mblocks[i%len(str(Mblocks))]
> error2 = Mblocks[some_int]
TypeError: 'int' object is not subscriptable

变化 3:

xored_value = ord(Mblocks(i%len(str(Mblocks)))=)) ^ ord(Cblocks(i%len(str(Cblocks))))

> error3 = Mblocks(callingWithParameter)

只是在 python 中something(withbraces) 正在调用某事。这里也发生了同样的事情

所以最简单的解决方案是在处理任何内容之前制作 的 Mbraces 和 Cbraces 就像这里是解决方案:

def xor_two_str(Mblocks,Cblocks):
 Mblocks = str(Mblocks)
 Cblocks = str(Cblocks)
 xored = []
 for i in range(max(len(Mblocks), len(Cblocks))):
      xored_value = ord(Mblocks[i%len(Mblocks)]) ^ ord(Cblocks[i%len(Cblocks)])
      xored.append(hex(xored_value)[2:])
 return ''.join(xored)

【讨论】:

    【解决方案2】:

    Python 需要 ord() function 的字符串,并且:

    Mblocks[i%len(str(Mblocks))]

    尝试从int Mblocks 访问索引为i%len(str(Mblocks)) 的元素,Python 不允许这样做。

    因此,您可以在函数开始时进行str 转换,并从那时起使用转换后的变量。

    def xor_two_str(Mblocks,Cblocks):
        str_Mblocks=str(Mblocks)
        str_Cblocks=str(Cblocks)
        xored =[]
        for i in range(max(len(str_Mblocks), len(str_Cblocks))):
            xored_value = ord(str_Mblocks[i%len(str_Mblocks)]) ^ ord(str_Cblocks[i%len(str_Cblocks)])
            xored.append(hex(xored_value)[2:])
        return ''.join(xored)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 2021-11-26
      • 2012-02-21
      • 2018-08-07
      • 2015-04-26
      • 2012-08-04
      相关资源
      最近更新 更多