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' 对象不可下标的主要内容,如果未能解决你的问题,请参考以下文章
Ode 集成器 Python TypeError 'float' 对象不可下标
Python TypeError:“_asyncio.Future”对象不可下标
ValueProxy[int] 抛出错误:“类型”对象不可下标