这里有新的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()函数中,它完成了它的工作。
非常感谢任何帮助!
答案 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正确执行。