我收到“ int”对象不可下标

时间:2020-06-11 10:08:37

标签: python

我是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)

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

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

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

尝试从i%len(str(Mblocks))个Mblock访问索引为int的元素,这是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)

答案 1 :(得分: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)