2014-08-27 65 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 ......挑战类。

祝你好运!

相关问题