Python 'int' 对象不可下标

Posted

技术标签:

【中文标题】Python \'int\' 对象不可下标【英文标题】:Python 'int' object is not subscriptablePython 'int' 对象不可下标 【发布时间】:2011-10-30 21:56:36 【问题描述】:

我正在尝试读取文件并确保每个值都按顺序排列。我不认为我将字符串正确转换为整数。这是我的一些代码。我也在尝试使用标志。

fileName = input("What file name? ")
infile = open(fileName,'r')
correct_order_flag = False
i = 0
line = infile.readline()
while line !="": 
    for xStr in line.split(" "):
        if eval(xStr) [i] < i:
            correct_order_flag = True
        else:
            correct_order_flag = False
    i = i+1
if correct_order_flag:
    print("Yes, the numbers were in order")
else:
    print("No, the numbers were not in order")
count = i - 1
print("There were", count, "numbers.")

【问题讨论】:

打印 xStr 以解决此问题 Jakob 的评论不恰当。 Pythonista 倾向于避免使用 eval(),因为它在评估不受信任的数据时会带来安全风险。 eval() 有合法的用例,但这不是其中之一,因为 str() 函数会做你想做的事。 【参考方案1】:

你是对的——你用eval(xStr)[i] 表示eval(xStr) 是一个数组,因此可以下标。您可能想要的(因为您说要将字符串转换为 int)只是 int(xStr),来制作整行:

if int(xStr) < i:

【讨论】:

【参考方案2】:

对于初学者,您根本不需要阅读整个文件。试试这个:

with open(fileName) as f:
    for line in f:
        # here goes your code

虽然不确定,“每个值都按顺序排列”是什么意思,但无论出于何种目的,使用eval() 都是一个非常糟糕的主意。

【讨论】:

【参考方案3】:

我想补充一点,因为您将 xstr[i] 与 i 进行比较,除非您的第一个数字小于零,否则标志将会改变,这意味着序列 1 2 3 4 5 会打印出“不,数字不按顺序”

【讨论】:

【参考方案4】:

正如 Chris 所指出的,int(s) 是将字符串转换为整数的首选方法。 eval(s) 过于宽泛,在评估来自不受信任来源的数据时可能会带来安全风险。

另外,脚本中还有一个错误。每次迭代都会设置 *correct_order_flag*,因此顺序不正确的条目可能会被正确顺序的后续条目掩盖。因此,当发现错误排序时,您应该跳出循环。

【讨论】:

以上是关于Python 'int' 对象不可下标的主要内容,如果未能解决你的问题,请参考以下文章

python 对象不可迭代或不可下标

Ode 集成器 Python TypeError 'float' 对象不可下标

Python TypeError:“_asyncio.Future”对象不可下标

ValueProxy[int] 抛出错误:“类型”对象不可下标

Python - TypeError:'int'对象不可迭代

TypeError:'int'对象不可迭代 - Python