2008-12-18 25 views
-3

That對於幫助kgiannakakis有幫助。 我下面面臨一個問題:需要Python中的幫助變量創建(續)

a = ['zbc','2.3'] 
for i in range(0,5): 
    exec('E%d=%s' %(i,a[i])) 

這導致:

 
Traceback (most recent call last): 
    File "", line 2, in 
    exec('E%d=%s' %(i,a[i])) 
    File "", line 1, in 
NameError: name 'zbc' is not defined 
+0

此代碼沒有任何意義。 `a`有2個項目,你的索引`i`從0到4,所以你肯定會得到一個錯誤!請解釋你想做什麼,而不是指出你得到的錯誤。 – Mapad 2008-12-18 08:05:22

回答

2

它看起來像你生成擴展到代碼:

E0=zbc 
E1=2.3 

在通過循環的下一次迭代,你會因爲a只有兩個元素長期得到一個IndexError例外。

因此,鑑於上述情況,您試圖將zbc的值指定爲E0。如果zbc不存在(它似乎沒有),那麼你會得到你提到的NameError。

很難確定你真的想用這段代碼做什麼,所以我不確定推薦什麼。你可以指定字符串代替:

exec('E%d="%s"' %(i,a[i])) 

這將擴展爲:

E0="zbc" 
E1="2.3" 

你仍然會得到IndexError因爲你的陣列a不是5個元素長。這對你來說應該是一個簡單的解決方法。

0

好。這段代碼很奇怪。

作爲一個這樣的單線程,它在語法上不正確,但我懷疑由於某種原因缺少換行符。但後來它成爲

a = ['zbc','2.3'] 
for i in range(0,5): 
    exec('E%d=%s' %(i,a[i])) 

但是,這將導致索引錯誤上顯示的參考一爲[我]:

>>> a 
['zbc', '2.3'] 
>>> for i in range(0,5): 
... print a[i] 
... 
zbc 
2.3 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
IndexError: list index out of range 

如果您避免了問題,你會得到

exec("E2.3=1") 

第二次通過lopp,這也是一個語法錯誤。

0

看來您正在嘗試使用標記爲this問題的解決方案。

如果您的目標是訪問循環中的值,則應該使用列表。這種變數名稱中帶有數字的奇怪概念並不適用於任何語言。嘗試這個。

vals = ['foo', 'bar', 'blah', 67, -0.4, 'your mom'] 
for i in range(len(vals)): 
    print(vals[i]) 

這是正確的方式有一個整數索引的值的列表,而不是把它放在變量名稱。

0

請記住,'exec'會執行你傳入的任何字符串,就好像你在.py文件或解釋器中輸入的一樣。

在調試exec()相關的代碼時,記錄你在遇到問題時'exec'的內容是有幫助的,如果你這麼做了,那麼你很容易就會注意到E0沒有被分配給字符串「zbc」,但是不存在的對象zbc。

除此之外,此代碼示例真的很奇怪。對於將字符串解析爲實例變量或其他名稱空間中的對象有一些合理用途,最值得注意的是,當您編寫高度動態的類時,需要使用凌亂的輸入做出明智的東西,或者需要從一個實例變量中設置一堆實例變量字典或字符串。但沒有上下文,你的問題中的代碼看起來像你要避免,或不明白如何使用list()和dict()對象..

我建議告訴你更多關於你的東西在下次你提出一個圍繞着這個特殊問題的問題時,試圖達到目的。這將給人們提供一個很好的機會來提出更好的解決方案,或者 - 如果你以一種完全合理的方式處理特定問題 - 阻止一堆答案告訴你,你正在做一些完全錯誤的事情。