2014-02-17 4 views
2

Я довольно новичок в Python. Я использую последнюю версию. Код, с которым я работаю, ниже:Простой запрос: Почему он говорит, что эта переменная не определена?

def tts(): 
    print('(0) Input a new list') 
    print('(1) Print the current list') 

    choice = int(input('Enter your choice: ')) 

    if choice == 0: 
     newList = eval(input('Enter a new list of prices: ')) 
     tts(); 

    elif choice == 1: 
     return newList 

Итак, я начинаю с запуска функции tts(). Он печатает то, что он должен и подсказывает мне для ввода. I введите 0 и введите список, например [20,10,30]. После того, как вы входите в эту точку, не следует ли теперь присваивать переменную newList списку, который я вводил? Кажется, это не работает. Если позже я буду называть newList в командной оболочке, он говорит, что newList не определен. По той же причине предположительно, если позже я выберу 1 в качестве своего выбора, он скажет, что newList не определен.

Буду признателен за советы. Я расстраиваюсь, и я подозреваю, что это очень тривиальная проблема, о которой я просто не знаю.

+2

fyi 'eval' является опасным. –

ответ

2

Вы вызываете tts() рекурсивно (почему?), А newList - это локальная переменная. Когда вы делаете рекурсивный вызов, newList не определен в новом фрейме стека.

Возможно, было бы проще реорганизовать ваш код в цикле вместо рекурсии. Тогда у вас не будет нового фрейма стека, и newList по-прежнему будет доступен.

+0

Хорошо, я думаю, что обнаружил мое глубокое недоразумение. Я попытался сделать это как можно более минималистским. Рассмотрим этот код: def test(): t = int (input ('Введите ваш выбор:')) if t == 0: testing(); 0: a = 2 return a Если я запустил test(), а затем введите 0, когда будет предложено в Shell, ничего не будет возвращено. Просто пустая строка. Почему это? Разве он не должен возвращаться 2? – user3317405

+0

Crap, я не могу набрать код в комментариях? Извините, я не пытаюсь быть ленивым или грубым, но можете ли вы его расшифровать? Если нет, я уточню. – user3317405

+0

Чтобы прояснить: Должен ли он не возвращаться 2, потому что он вызывает testing(), который записывается для возврата a, который равен 2? – user3317405

1

Ваш «newList» определен в инструкции if, и он возвращается в инструкции ELSE. Поэтому, если он попадает в элиту, он никогда не создавался.

Смежные вопросы