Неожиданное «NameError» при присвоении входной переменной значения в словаре - PullRequest
0 голосов
/ 19 мая 2019

У меня есть переменная с вводом, и все в порядке, я сделал переменную глобальной с помощью оператора 'global [variable]', а позже я создал словарь с ключом 'Nome:' и значение переменной 'nome_civ_1', но python говорит в 'NameError', что 'nome_civ_1' не определено.

Сначала я попытался сделать переменную «глобальной», потому что она находится в функции, и я думаю, что это сработало, но Python все еще говорит, что «nome_civ_1» не определено.

Я искал ключевое слово с ошибкой или что-то в этом роде, но ничего подобного не нашел.

 print("Preencha os Seguintes Parâmetros Para Começar a Jogar:")
    print()

    global nome_civ_1
    global sis_gov_1 # Other Variable 
    global turnos_máximos # Other Variable 

    nome_civ_1 = input("Nome da sua Civilização: ") 
dados_civ_1 = {"Nome:" : nome_civ_1, # The "Name Error" line. 
               "Sistema de Governo:" : sis_gov_1,
               "Sistema Estelar:" : "", # The "" is just to avoid an syntax error
               "Nome do Planeta:" : "", 

               # More Keys and Values

Ожидаемый результат этого состоял просто в том, что этот dict назначил переменную в качестве значения, тогда я использовал бы этот dict для дальнейшего использования.

Но я получаю 'NameError' причины, которую я не вижу.

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Оператор global не "определяет" переменные .

global ... означает, что перечисленные идентификаторы должны интерпретироваться как глобальные.

В приведенной выше функции nome_civ_1 не привязан ни к какому объекту.Оператор global просто утверждает, что, если вы привязали его к объекту, привязка повлияет также на область действия вне функции.

0 голосов
/ 19 мая 2019

я сделал переменную глобальной с помощью оператора 'global [variable]'

Вы на самом деле этого не сделали.global применяется только к переменным, которые уже определены в глобальной области видимости.Вы не можете вставить переменную в глобальную область из локальной области:

>>> def test():
...     global loc
...     loc = 5
...     
>>> loc
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'loc' is not defined

Однако вы можете пометить существующие глобальные переменные как global внутри функции, чтобы приприсваивая им, Python не создает новую локальную переменную, но изменяет значение этой существующей глобальной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...