Хиты импорта Python: нет имен файлов в трекбеке ошибок импорта
Я написал ловушку для импорта в соответствии с PEP 302, и она работает нормально, за исключением одной раздражающей детали. Когда есть ошибка импорта, скажем, код, который пытается импортировать модуль, который не существует, я получаю трекбек со строками вроде:
File "<string>", line 10, in helloEnv
в строке 10 находится вызов несуществующего импорта, но нет имени файла, просто <string>
,
Мои хуки для импорта очень похожи на минимальные в PEP 302. При создании модуля я всегда устанавливал правильное значение строки в __file__
и даже проверить это new_module()
устанавливает правильное значение __name__
, Кроме того, оба str()
а также repr()
модуля вернуть что-нибудь информативное.
Эти безымянные файлы в трекбеке затрудняют отладку ошибок импорта. Откуда трекбек берет свои имена файлов? почему он не видит названия модулей?
РЕДАКТИРОВАТЬ - думать об этом еще немного, возможно, потому что код модуля выполняется с использованием exec()
, можно ли дать exec()
имя файла?
1 ответ
Итак, это было достаточно просто. вместо
exec(code, mod.__dict__)
записывать:
exec(compile(code, fullname, "exec"), mod.__dict__)