Python NameError:name''没有定义(虽然看起来确实如此)

时间:2017-09-10 18:09:02

标签: python nameerror

这里有新的Python家伙,有点拉我的头发。运行Python 3.6,Windows ...我知道" NameError:name' - '没有定义"有很多帖子,但老实说,我没有能够解决这个问题,所以请原谅任何重复。无论如何,这里遇到了麻烦:

def char_swap():
    swapped_a = [l.replace('a', '@') for l in lines]
    swapped_s = [l.replace('s', '$') for l in lines]
    swapped_i = [l.replace('i', '!') for l in lines]
    swapped_o = [l.replace('o', '0') for l in lines]
    global swapped
    swapped = [swapped_i,swapped_o,swapped_s,swapped_a]
    print(swapped)
    return swapped

def numberAdd():
    added = [n+(str(random.randint(0,9999))) for n in swapped]
    print(added)
    return added

在这里,'行'是完整代码中的先前列表。错误是" NameError:name' swapped'未定义"

对我而言,更令人难以置信的是,#char_swap'功能工作得很好,它引用了线条,这几乎是逐字设置和定义的,我已经定义和交换了#39;这里。全球,给它一个列表值,然后我们离开。事实上,如果我换掉“交换”'在'行'的numberAdd()函数中,它完成了它的工作。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在第一个函数char_swap中,您已定义了交换的全局变量。在第二个函数number_add中,您使用的是全局变量swapped。问题是,交换的全局变量仅在运行char_swap时创建,而不是在您定义它时创建。

这个简单的例子可以说明问题和解决方法:     


    def f():
        global z
        z = 17
def g(): return z
> g() NameError: name 'z' is not defined > f() > g() 17

第一次执行g时,在执行f之前,python不知道z。执行f后,python知道z所以g正确执行。