#python #sys
#питон #система
Вопрос:
mod.py
print "this is mod modules ..."
import sys
del sys.modules['mod']
sys.modules['mod'] = "test mod"
main.py
import mod
print mod
когда я выполняю, отображается исключение:
# python main.py
this is mod modules ...
Traceback (most recent call last):
File "main.py", line 1, in <module>
import mod
File "/root/test1111/mod.py", line 4, in <module>
sys.modules['mod'] = "test mod"
AttributeError: 'NoneType' object has no attribute 'modules'
Я хочу знать, извините меня, чем это вызвано?
Комментарии:
1. Процесс импорта Python — довольно сложный механизм, и вам не следует вмешиваться в него, если вы точно не знаете, что делаете. Я думаю, вам следует объяснить, почему вы считаете необходимым удалять записи
sys.modules
в. Вероятно, есть менее радикальный способ добиться того, что вы пытаетесь сделать.2. Имейте в виду, что
sys
само по себе это глобальное имя в модуле, который вы только что удалили.3. (Я немного удивлен
AttributeError
NameError
, что вы получаете, а не a).
Ответ №1:
Не удаляйте данные в sys.modules. Он внутренне используется интерпретатором, и при его удалении может возникнуть неопределенное поведение, особенно если вы попытаетесь повторно импортировать модуль во второй раз.
Неопределенное поведение означает, что могут возникать странные ошибки, может произойти сбой интерпретатора или ваш cat может загореться.