2012-10-05 84 views
0

我有我在/var/tmp開發研製...當我移動到需要的目錄由於某種原因,它返回以下錯誤的腳本:的Python:分配問題

Traceback (most recent call last): 
    File "tail.py", line 104, in <module> 
    test=isItAlive(line) 
    File "tail.py", line 55, in isItAlive 
    return test 
UnboundLocalError: local variable 'test' referenced before assignment 

它訴說的功能是:

def isItAlive(text): 
     with open(valcsv) as f: 
       searches = [x.split(',')[1] for x in f.read().splitlines()] 
       for search in searches: 
       #  print search 
         if not search in text: 
           test="TOBEADDED" 
         else: 
           test=search 
           break 
       return test 
     f.close() 
+1

我可能是錯的,但我很確定在用'with'打開的文件上調用'close()'是多餘的。 –

+0

也只是注意到你的'return'語句在你的'with'塊中。可能不是最安全的事情,因爲它可能通過自動清理而短路。這也意味着你的'f.close()'是雙重冗餘的,因爲它永遠不會被調用。 –

+2

@ sr222不,它不會因爲清理而造成短路。 ''with'是更好的替代方法,使用'try/finally'清理文件。它提供與'finally'一樣的保證,以確保清理代碼在出口時運行,無論執行如何離開模塊。否則,這將是毫無意義的;這很容易確保文件在沒有任何異常情況發生的情況下被關閉。 – Ben

回答

4

searches值是空的,所以for循環永遠不會分配一個值test

初始化test在你的函數開始:

def isItAlive(text): 
    test = None 

,並弄清楚爲什麼你的valcsv文件是空的。

+0

謝謝...我移動了腳本但忘了移動csv ... OOPSS! – MHibbin

3

如果searches是一個空表,整個循環將被跳過,test將永遠不會被初始化。你需要在循環之前聲明test = None或其他的東西。

+0

謝謝...我移動了腳本但忘了移動csv ... OOPSS! – MHibbin