2011-10-19 58 views
0

我試圖執行自定義find_moduleload_module方法。 它似乎被調用,但find_module總是調用 全名和路徑始終設置爲None。 我不明白爲什麼。自定義find_module總是調用'全名'等於無

下面是程序部分:

class TouchImportLoader: 
    def load_module(self, fullname): 
     return None 

class TouchImportFinder: 
    def find_module(self, fullname, path=None): 
     #fullname and path seem to be None always, when printed here 
     return TouchImportLoader() 

sys.meta_path.append(TouchImportFinder) 

我用簡單的腳本,如稱之爲:

import time 
print(time.clock()) 

回答

1

請閱讀documentation

至少用t調用find_module()方法他正在導入的模塊的絕對名稱。如果要導入的模塊包含在包中,則父包__path__屬性作爲第二個參數傳入。

僅爲包傳遞path參數。

在你的榜樣,你應該得到一個TypeError

結合的方法find_module()必須TouchImportFinder實例作爲第一個參數來調用(代替了實例str

...因爲你是添加取景器meta_path,而不是實例的類:

sys.meta_path.append(TouchImportFinder) 

這應該閱讀:

sys.meta_path.append(TouchImportFinder()) 
+0

謝謝。我將Python嵌入到另一個應用程序中,並且無法在初始化過程中捕獲任何錯誤。這解決了這個問題。 – rbairos