2015-05-28 46 views
0

我在Python 2.x中遇到以下問題:嘗試:除了:總是返回

基本上,我在每次迭代時都得到一個變量的當前值和以前的值。在第一次迭代中,prev_var將不會被定義,所以我嘗試使用Try Except函數,但由於某些原因,Except ...選項總是在每次迭代時返回,因此prev_var始終等於var。有沒有修復/更優雅的方式來做到這一點?

對不起,代碼塊,我在我的手機上這樣做。

def main(): 
    var = 0 

    try: 
     prev_var = prev_var 
    except NameError: 
     prev_var = var 

    #then at the end of main: 
    prev_var = var 
    var += 1 

對不起,我的noobishness。謝謝你的時間。如果有問題,我正在使用Cinema 4d。

+1

有HTTP的讀取://www.python- course.eu/global_vs_local_variables.php – NPE

+1

當然它確實,你還沒有分配'prev_var' – IanAuld

+0

沒有得到你的觀點,迭代的東西在哪裏? – ZdaR

回答

0

你的名字在函數的local namespaceprev_var,你需要使它global

prev_var = 0 
var = 0 

def main(): 
    global prev_var 
    global var 

    prev_var = var 
    var += 1 

當您指定的函數變量,它是由garbage collector函數結束時撈起。要阻止這種情況的發生,你必須將變量返回到稍後拾取的東西。或者你在函數前面聲明變量global namespace

請注意,如果您在global namespace聲明它,你不需要使用關鍵字global的功能,Python會在所有封閉的命名空間進行搜索(包括global)。不過,這是一個很好的做法,並且使代碼更清晰。

看着代碼,你可能想要對var做同樣的事情。我已經將代碼縮短爲你真正需要的。

在最佳實踐方面,你應該避免使用global變量,因爲它可以造成大規模頭痛爲你的代碼的發展,更好地傳遞變量到functionarguments,並將其退回到變量。

0

我想,你的價值分配之外循環,試試這個

如果 == 「主要」:

var = 0 

for x in range(0, 5): 

    try: 
     prev_var = prev_var 

    except NameError: 
     prev_var = var 

    finally: 
     prev_var = var 
     print ('prev_var '+str(prev_var)) 
     var += 1