При запуске моей строки я получаю следующую ошибку:
Redefining name 'tmp_file' from outer scope (line 38) (redefined-outer-name)
Вот мой фрагмент кода в этой строке:
tmp_file = open('../build/' + me_filename + '.js','w')
При запуске моей строки я получаю следующую ошибку:
Redefining name 'tmp_file' from outer scope (line 38) (redefined-outer-name)
Вот мой фрагмент кода в этой строке:
tmp_file = open('../build/' + me_filename + '.js','w')
Это происходит потому, что у вас есть локальное имя, идентичное глобальному имени. Локальное имя имеет приоритет, конечно, но оно скрывает глобальное имя, делает его неприемлемым и вызывает путаницу для читателя.
Решение
Измените локальное имя. Или, может быть, глобальное имя, что имеет смысл. Но учтите, что глобальное имя может быть частью интерфейса общего модуля. Локальное имя должно быть локальным и, следовательно, безопасным для изменения.
Если... ваше намерение состоит в том, чтобы эти имена были одинаковыми. Затем вам нужно будет объявить имя как global
в локальной области:
tmp_file = None
def do_something():
global tmp_file # <---- here!
tmp_file = open(...)
Без объявления global
локальный tmp_file
не будет связан с глобальным. Отсюда предупреждение.
with
Помимо @Rodrigo правильный ответ о областям: если ваш tmp_file
- это просто временный файл, вы можете использовать
with open('../build/' + me_filename + '.js','w') as tmp_file:
# do something
в обоих случаях. Он четко определяет, где будет использоваться ваш tmp_file
.
рекомендуемый способ обработки переменных, область видимости которых должна быть четко ограничена.
Pylint имеет встроенное описание:
pylint --help-msg=redefined-outer-name
дает
: redefined-external-name (W0621): переопределение имени% r из внешней области (строка% s) Используется, когда имя переменной скрывает имя, определенное в внешний scope. Это сообщение принадлежит проверке переменных.
Вы получаете эту ошибку, если вы определили одну и ту же переменную в нескольких местах, например, вне def и внутри def.
Если вы используете единственную переменную, определите ее как global variable_name
и используйте глобальное ключевое слово для всех мест. В противном случае переименуйте другие переменные.