Как мне вызвать функцию, которая возвращает переменную несколько раз, находясь внутри другой функции?

У меня есть функция (текстовая игра), которая несколько раз запрашивает ввод, из которого все пробелы, которые я хотел бы удалить сразу после этого, прежде чем приступить к проверке ошибок.

Чтобы уменьшить избыточность, я подумал о том, чтобы сделать другую функцию, которая будет делать и то, и другое, а затем возвращать переменную следующим образом:

def startGame():
    print("1, 2 or 3?")
    response = response()

def response():
    a = raw_input()
    a = a.strip()
    return a

startGame()

Проблема в том, что я продолжаю получать:

UnboundLocalError: ссылка на локальную переменную «ответ» перед назначением.

Для меня это не имеет смысла, так как ответу присваивается возвращаемое значение response().
Что я упускаю? Есть ли более простой способ сделать это?


person Joseph Webber    schedule 15.05.2013    source источник


Ответы (1)


Вы назвали локальную переменную response тоже; вы не можете этого сделать, это маскирует глобальную функцию response().

Переименуйте локальную переменную или функцию:

def get_response():
    # ...


response = get_response()

or

def response():
    # ....

received_response = response()
person Martijn Pieters    schedule 15.05.2013
comment
@Martijn_Pieters Спасибо. Я не знал, что Python так делает, но теперь знаю! - person Joseph Webber; 15.05.2013
comment
@JosephWebber: В функциях все имена, которые вы напрямую назначаете (somename = ...), становятся локальными переменными (это делает компилятор языка). Это не относится к атрибутам (somename.someattribute = ), только к прямым именам. Таким образом, response уже определено как локальное имя, но вы пытались использовать его, прежде чем присваивать ему какое-либо значение. Тогда возникает исключение. - person Martijn Pieters; 15.05.2013