2011-10-19 5 views
0

カスタムfind_moduleload_moduleメソッドを実装しようとしています。 呼び出されたようですが、find_moduleは常に と呼ばれ、fullnameとpathは常にNoneに設定されています。 私はなぜそれが理解できません。私はそのような単純なスクリプトでそれを呼んでいるカスタムfind_moduleは常に 'fullname'をNoneとして呼び出されます

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をお読みください。

find_module()メソッドは、少なくともt彼はインポートされているモジュールの絶対名です。インポートするモジュールがパッケージに含まれている場合、親パッケージの__path__属性が第2引数として渡されます。

path引数は、パッケージに対してのみ渡されます。

あなたの例では、あなたがTypeErrorを取得する必要が:

あなたがしているので、未結合の方法find_module()が...

(代わりにstrインスタンスを得た)最初の引数としてTouchImportFinderインスタンスで呼び出さなければなりませんファインダクラスmeta_pathを追加し、インスタンスのクラスを追加しないでください。

sys.meta_path.append(TouchImportFinder) 

これは読んでください:

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

ありがとうございました。 ImはPythonを別のアプリケーションに埋め込み、初期化の初期段階でエラーをキャッチできませんでした。これは問題を解決します。 – rbairos

関連する問題