Python返回错误NameError: name 'subject_t'未定义

-4 投票
2 回答
2186 浏览
提问于 2025-04-18 18:45

Python 报错了

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

2 个回答

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。如果你使用全局范围的方法,如果 t_subject() 从来没有被调用过,subject_t 就会是 None(或者你在全局范围内赋给它的其他值)。

另外,这和你问的问题没有直接关系,但你赋值的其实是叫 hannahmatthew变量,而不是像 'truxten' 这样的字符串。

3

这是因为 subject_t 超出了作用域,实际上它 并没有被定义

变量 subject_t 只在 t_subject() 这个函数里面存在。所以你不能显示它。

你可以使用:

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

但我建议,像很多函数一样,加入一个返回语句:

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

我觉得你需要进一步研究一下关于 函数、变量、作用域 的内容……尤其是类。

祝你好运!

撰写回答