Хиты импорта 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__)
Другие вопросы по тегам