2014-10-09 45 views
0

我與它具有如下結構的腳本,一個很奇怪的問題:進口模塊,隨機設置爲無

import os 

# ... some functions 

def function_one(): 

    ... 

def function_two(): 

    if os.path.isdir(...): 

最後一條語句有時會失敗,NoneType has no attribute 'path'和偶然我發現的function_two

的modfied版本
def function_two(): 
    if os is None: 
     print function_one 

打印None。所以不僅osNone,而且function_one也是None

我想重現錯誤但不知道在哪裏尋找原因,我沒有全局變量,我不修改sys.modules

有沒有人有想法os可以變成None?我是不是能夠模擬這種不使用全局變量名稱osfunction_one ...

+0

是的,全局變量幾乎是這種情況發生的唯一方式。 FWIW,如果另一個模塊_imports_這個模塊,他們也可以猴子修補它的全局變量來將'os'和'function_one'設置爲'None' ... – mgilson 2014-10-09 14:39:55

+0

當CPython關閉時,你會得到這種效果:它用None代替全局變量(主要是歷史的)原因。從解釋器關閉時運行的'__del__'方法調用函數嗎? – 2014-10-09 14:42:35

+0

您使用的是什麼版本的Python?是否有代碼將'None'分配給這些名稱?你能展示更多的代碼嗎? – l04m33 2014-10-09 14:54:41

回答

0

如果你有你的PYTHONPATH名爲OS另一個模塊,它可以得到進口替代。正如人們在評論中提到的那樣,另一個模塊也可能是用sys.modules或導入你的模塊來修改os模塊。