2013-08-06 143 views
1

誰能告訴我爲什麼我得到這個錯誤?我看不出有什麼問題的代碼,當我Name,Start,End取代**item我仍然無法得到它的工作KeyError:'姓名',有什麼問題?

print("To finish input enter nothing.") 
Schedule = [] 
Finish = False 
while not Finish: 
    Name = input("What is the name of the show?: ") 
    Start = input("What time does the show start?: ") 
    End = input("What time does the show end?: ") 
    Schedule.append({'Name':Name, 'Start':Start, 'End':End}) 
    print("{0:<10} | {1:<10} - {2:<10}".format(Name,Start,End)) 
    print("{Name:<10} | {Start:<10} - {End:<10} ".format(**item)) 
    if len(Name) == 0 or len(Start) == 0 or len(End) == 0: 
     Finish = True 
+1

我注意到有一個縮進問題。 –

+3

什麼是'item'? – arshajii

+0

這只是由於我在網站上格式化,所以在實際源代碼中是可以的。 –

回答

2

您從不創建item

item = {'Name':Name, 'Start':Start, 'End':End} 
Schedule.append(item) 
+0

謝謝,我只是剛剛瞭解了一些項目,所以我不太清楚他們的工作方式。謝謝。 –

0

試試這個:

print("To finish input enter nothing.") 
Schedule = [] 
Finish = False 
while not Finish: 
    Name = raw_input("What is the name of the show?: ") 
    Start = raw_input("What time does the show start?: ") 
    End = raw_input("What time does the show end?: ") 
    Schedule.append({'Name':Name, 'Start':Start, 'End':End}) 
    print("{0:<10} | {1:<10} - {2:<10}".format (Name,Start,End)) 
    print("{Name:<10} | {Start:<10} - {End:<10} ".format (**item)) 
    if len(Name) == 0 or len(Start) == 0 or len(End) == 0: 
     Finish = True 
+0

我在python 3中,我不認爲需要raw_input,如果我使用原始輸入,它不起作用。 –

+0

哦,對不起。我在Python 2.7中嘗試過,並且這種改變使代碼有效。我認爲它可以幫助你... –

+0

沒問題:D無論如何。 –

0
print("{Name:<10} | {Start:<10} - {End:<10} ".format(**item)) 

此代碼工作正常,我只是你沒有定義項目?

假設項目是某種像(名稱,開始,結束)的容器,你需要這條線更改爲這樣:所以

print("{:<10} | {:<10} - {:<10} ".format(**item)) 

你不使用鑰匙,它可以隨便填按順序排列字段。 或者:

print("{Name:<10} | {Start:<10} - {End:<10} ".format(Name=item[0], 
                  Start=item[1], 
                  End=item[2])) 

如果你真的使用按鍵打算。

基本上,當您沒有爲該密鑰提供值時,您的密鑰錯誤來自使用密鑰請求值({:< 10})。

希望有所幫助。