【发布时间】:2016-03-23 19:22:08
【问题描述】:
我有一个包含许多列表的程序,并且可以轻松地为它们分配变量,除了一个列表。快速了解程序,我打开 lsblk 检查磁盘,保存到文件。然后我删除带有 .sh 文件的磁盘,然后扫描以查看新列表是什么。我比较两个列表的差异,然后读取差异并扫描整数,然后将第一个 int 拉出,最终将其保存回名为 diskchange 的列表中。见下文:
diskchange = [None]*5
for i in range(1,3):
# Initial disk scan
lsblk = subprocess.Popen(['lsblk'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
scan1 = [line.strip() for line in lsblk.stdout if 'nvme' in line]
# Disable the slot to get ready to record which drive number disappeared
with open('removeslot%d.sh' %i, 'rb') as file:
script = file.read()
subprocess.call(script, shell=True)
lsblk = subprocess.Popen(['lsblk'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
scan2 = [line.strip() for line in lsblk.stdout if 'nvme' in line]
for i in scan1:
if i not in scan2:
result = result + i
disk = filter(str.isdigit, result)
strdiskchange = str(disk)
disk = int(strdiskchange[0])
print disk
print type(disk)
print type(diskchange)
diskchange[i] = disk
print("The new disk added to slot %i is /dev/nvme%sn1" %(i, diskchange[i]))
你可以看到我试图用一些打印语句来诊断问题,这里是输出:
0
<type 'int'>
<type 'list'>
Traceback (most recent call last):
File "GUIArduino.py", line 61, in <module>
diskchange[i] = disk
TypeError: list indices must be integers, not str
0 是从结果中提取的最终值,我将磁盘类型打印到屏幕以显示它是 int 类型,我也将 diskchange 打印为类型列表,但我无法将 int 存储到列表中原因。
我尝试将disk = []的初始值更改为None, 0, 1, '',没有任何变化。我也试过 str(disk) int(disk) 之类的。
即使只是键入 diskchange[i] = 0 也会给出相同的信息。哪个让我最困惑
任何帮助将不胜感激。
【问题讨论】:
-
您将变量
i重用于两个不同的循环。通常这是可以的,但因为循环在彼此内部,i被覆盖。 -
哇,这么小的错误。谢谢你让我头疼