2016-06-21 38 views
1

我在python包中看到一個奇怪的「未綁定本地」錯誤,似乎違反所有邏輯。我不能讓MWE重現它,但會試圖簡潔地解釋,並希望有人能夠提供一些解釋。導入的模塊超出範圍(未綁定的本地錯誤)

爲了這個例子module是我開發的包,Modelmodule中的一個類。在Model類(model.py)的定義是這樣的:

import module 

class Model: 
    def __init__(self): 
     print module 

    def run(self): 
     print module 

現在,當我在這樣的腳本實例化一個Model:在__init__

from model import Model 
m = Model() 
m.run() 

module成功打印,但我在run函數中獲得未綁定的本地錯誤。

我試圖用PDB,這就是事情變得很奇怪診斷這一點,因爲如果我添加一個PDB跟蹤前夕在run()功能print module線,那麼我可以成功運行print module沒有綁定本地錯誤,但如果我走到下一行,則會拋出錯誤。 module如何在__init__()的範圍內,並在pdb的範圍內,但不在run()的範圍內?

我知道這是不理想的,因爲沒有MWE,但我似乎無法在完整代碼的上下文之外重現此內容。我希望有人能夠了解可能發生的事情並提出一些進一步調試的策略。

+0

你能給我們完整的堆棧跟蹤嗎?這將有助於診斷,以確保它是一個你認爲它是未綁定的本地。 – Delioth

回答

3

顯然你有一個名爲module的函數run中某處的局部變量。例如,下面的代碼會拋出UnboundLocalError

import sys 

def run(): 
    print sys 
    sys = None 
run() 

這裏sys = None介紹尚未定義的陰影裏面run和當時print調用它的進口sys一個本地名稱,因此錯誤。要在run內使用導入的模塊,您必須查找並重命名本地變量。 python範圍規則的更多信息是here

+0

這不完全是這樣,但它確實使我找到了答案。在run()塊內有一個「import module.function」調用(不要問),這似乎是問題的根源。一旦我找到它,輕鬆修復...謝謝! –