2014-08-27 62 views
-4

的Python返回錯誤的Python返回錯誤NameError:名字 'subject_t' 沒有定義

Traceback (most recent call last): 
    File "<stdin>", line 29, in <module> 
NameError: name 'subject_t' is not defined 

代碼:

name = raw_input('Enter your name') 

if name == 'Truxten': 
    print "Hello Truxten" 
    user_name = 'truxten' 

if name == 'Hannah': 
    print "Hello Hannah" 
    user_name = hannah 

if name == 'Matthew': 
    print "Hello Matthew" 
    user_name = matthew 

if name == 'Jax': 
    print "Hello Jax" 
    user_name = jax 

if name == 'Ellie': 
    print "Hello Ellie" 
    user_name = ellie 

def t_subject(): 
    subject_t = raw_input('Enter the Subject') 

if user_name == 'truxten': 
    t_subject() 

print subject_t 
+1

'subject_t'是在函數't_subject()'內部定義的,因此當您嘗試打印時它超出了範圍。 – therealrootuser 2014-08-27 18:29:54

+0

具體而言,'subject_t'是函數't_subject()'的局部變量,因此不能在其外部訪問。你可以通過添加一個'global subject_t'語句來完成。 – martineau 2014-08-27 19:13:58

回答

1

當您在t_subject函數賦值給變量subject_t,你居然分配它起作用的地方範圍。你必須在全球範圍內定義subject_t如下:

subject_t = None 

def t_subject(): 
    global subject_t 
    subject_t = raw_input('Enter the Subject') 

,則在打印subject_t無條件。如果您使用全局範圍方法,則subject_t將包含None(或您已分配給全局的其他值),如果t_subject()從未呼叫過。

而且,這是沒有直接關係的問題,你問過,但你要分配變量命名爲hannahmatthew,而不是字符串,像'truxten'

+1

建議某人應該使用Globals作爲函數的返回值是一個非常糟糕的主意 - 即使是初學者也是如此。更好的解決方案是展示如何使用return語句。 – 2014-08-27 20:02:46

+0

目前還不清楚作者是初學者還是隻是被迫使用*風格*,所以我提供了一個解決方案來回答被問到的問題,而不是他可能*試圖完成的事情。 – toriningen 2014-08-27 22:08:20

+0

公平 - 雖然我希望沒有人會強迫任何人使用Globals - 不寒而慄... – 2014-08-28 00:03:54

3

這是因爲subject_t超出了範圍,並且確實沒有被定義爲

變量subject_t只存在於t_subject()函數中。所以你不能顯示它。

你可以使用:

def t_subject(): 
    subject_t = raw_input('Enter the Subject') 
    print subject_t 

但我建議,像許多功能,你有一個return語句:

subject = None 

def t_subject(): 
    subject_t = raw_input('Enter the Subject') 
    return subject_t 

if name == 'truxten': 
    subject = t_subject() 

if subject is not None: 
    print subject 

我認爲,進一步的研究涉及您的名義就functions,變量scope,和classes ......挑戰類。

祝你好運!

相關問題