#python #import
#python #импорт
Вопрос:
Я пытаюсь реализовать пользовательские find_module
и load_module
методы. Кажется, что он вызывается, но find_module
всегда вызывается как с полным именем, так и с путем, всегда установленным в 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:
Пожалуйста, прочитайте документацию:
find_module()
Метод вызывается по крайней мере с абсолютным именем импортируемого модуля. Если импортируемый модуль содержится в пакете, то__path__
атрибут родительского пакета передается в качестве второго аргумента.
path
Аргумент передается только для пакетов.
В вашем примере вы должны получить TypeError
:
несвязанный метод
find_module()
должен вызываться сTouchImportFinder
экземпляром в качестве первого аргумента (вместо этого естьstr
экземпляр)
…поскольку вы добавляете класс finder в meta_path
, а не экземпляр класса:
sys.meta_path.append(TouchImportFinder)
Это должно гласить:
sys.meta_path.append(TouchImportFinder())
Комментарии:
1. Спасибо. Я внедряю Python в другое приложение и не смог перехватить какие-либо ошибки, возвращаемые на ранней стадии его инициализации. Это устраняет проблему.