У меня проблема, когда я пытаюсь использовать функцию из другого модуля, но эта функция вызывает функцию отладки, которая проверяет, имеет ли глобальная переменная определенный атрибут. Эта глобальная переменная не задана (в противном случае устанавливается с использованием parser.parse_args
), когда я импортирую функцию, чтобы функция жаловалась, что атрибут не существует. Для уточнения:Как обойти неинициализированные глобальные переменные в другом модуле в Python?
Файл findfile.py
:
_args = {}
def _debug(msg):
if _TEST and _args.debug:
print msg
def findfile(filename):
...
_debug("found file")
...
if __name__ == "__main__":
...
_args = parser.parse_args()
...
Файл copyafile.py
import findfile
findfile.findfile("file1")
Это дает мне
AttributeError: 'dict' object has no attribute 'debug'
Теперь я понимаю, что parser.parse_args()
возвращает пространство имен (??) и что _args.debug
на самом деле не смотрит в dict
. Но мой вопрос: как я могу в этой ситуации правильно назначить что-то _args
, чтобы установить _args.debug
на False
?
Я не могу изменить findfile.py
, но я могу изменить copyafile.py
.
Как эти вещи обычно обрабатываются иначе? Что такое pythonic способ включения флагов отладки в сценарии?
Если я правильно вас понял, вы хотите, чтобы я создать аргумент синтаксический анализатор в моем файле и установить _args переменную в другом модуле? Я не могу изменить первый файл – sPirc
'findfile._args = Namespace (debug = False)' сделал трюк. Спасибо. – sPirc
@sPirc: Мне жаль, что вам нужно иметь дело с этим уродливым 'findfile.py', поэтому я предполагаю, что любой хак является законным. Но я рад слышать, что вы решили свою проблему. Возможно, вы захотите принять этот ответ * (галочка слева) * :) –