2013-03-09 2 views
1

Почему следующие функции не позволяют мне использовать переменную os после ее возврата функцией? Модуль os не импортируется, поэтому это не должно быть проблемой. Когда я вызываю функцию Begin() и печатаю переменную os после завершения функции, питон говорит, что переменная не определена.Использование возвращенной переменной в python

def Begin(): 
    os = raw_input("Choose your operating system:\n[1] Ubuntu\n[2] CentOS\nEnter '1' or  '2': ") 
    if os != '1' and os != '2': 
     print "Incorrect operating system choice, shutting down..." 
     time.sleep(3) 
     exit() 
    else: 
     return os 

Begin() 
print os 
+7

** пожалуйста ** не используйте 'os' в качестве имени переменной - это имя хорошо известного модуля. – nneonneo

ответ

4

Вы должны присвоить возвращаемый результат фактической переменной. os в функции существует только в области функций и не может использоваться за ее пределами.

result = Begin() 
print result 

Как @nneonneo упоминалось, os является частью стандартной библиотеки, и обычно используемый модуль, и используя os как имя переменной будет запутать читателя, и если os импортируется, перепишет его.

Еще одно предложение:

if os != '1' and os != '2': 

можно записать более succintly в

if os not in ('1', '2'): 

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

+0

Каждый раз, когда у меня есть проблема ... это неосторожная ошибка. Благодаря! – user1710563

+1

@ user1710563 если вы считали, что этот ответ был полезен, пожалуйста [примите] (http://meta.stackexchange.com/q/5234). – Volatility

2

В вашем коде os есть локальная переменная Begin(), как предложено @nneonneo, не использует имена стандартных модулей.

Если вы просто пытаетесь напечатать значение, которое вы можете просто сделать

print Begin() 

, если вам нужно использовать возвращаемое значение из Begin(), а затем присвоить его переменной, и вы можете использовать его в дальнейшем.