2014-04-19 47 views
0

我使用這個Python代碼讀取的Windows INI文件請參閱for循環

from ConfigParser import SafeConfigParser 

parser = SafeConfigParser() 
parser.read('someinifile.ini') 

for section_name in parser.sections(): 
    for name, value in parser.items(section_name): 
     print ' %s = %s' % (name, value) 
    lastkey = name 

工作完全正常,當我試圖獲得最後的鍵名到一個名爲「中的lastKey」變量變量之外。但是,如果您注意到我正嘗試在「for name,value」循環之外讀取「name」變量。這是非法還是不正確? :-)我得到了lastkey中的最後一個鍵名,但想知道我在這裏做錯了什麼。我對寫得不好的代碼有過敏反應,所以在懷疑的時候總是喜歡說清楚。而我全新到Python太」)

回答

1

如果parser.items(section_name)是空的,名字將永遠不會被初始化 你會得到一個。‘NameError:名字‘名’評估線lastkey = name時沒有定義’異常。

所以,不要忘記考慮的情況下parser.items(section_name)是空的。

+0

我在函數的開始實際上已經初始化「中的lastKey」,但它在這個代碼是不可見的,而當我返回lastkey將會是空的或者有最後一個鍵名,但是我沒有明確地聲明「name」變量,它來自for循環,所以我想知道是否正確地提到了這個變量t循環之外的變量。 –

+0

只有在確定循環運行至少一次迭代時,纔可以在for循環外引用'name'。這就是爲什麼你應該檢查'parser.items(section_name)'是否爲空。 –

+0

好的謝謝你的確認:) –