私は数多くのリストを持つプログラムを持っています。プログラムのクイックダウン、lsblkを開いてディスクをチェックし、ファイルに保存します。次に、.shファイルを含むディスクを取り出し、新しいリストが何であるかを調べるためにスキャンします。私は2つの違いのリストを比較し、違いを読んで整数をスキャンし、最初のintを引き出して最終的にdiskchangeというリストに戻します。以下を参照:リストに混乱しました:TypeError:リストインデックスはstrでなく整数でなければなりません
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]))
をあなたには、いくつかのprint文で問題を診断しようとすると、ここに出力され、私を見ることができます:
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(ディスク)int(ディスク)と同様のものを試しました。
だけでも、diskchange [i] = 0と入力すると同じメッセージが表示されます。どちらが私を最も混乱させているのですか?
助けていただければ幸いです。
変数iを2つの異なるループに再利用しています。通常これはOKですが、ループが互いに内側にあるため、 'i'はオーバーライドされています。 – Oisin
うわー、そんなに小さな間違い。頭痛を救ってくれてありがとう –