Python del sys.modules вызвал проблемы

#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 может загореться.