在我明确定义之后,Python 3.6.1表示未定义的值/变量

时间:2017-07-17 18:56:22

标签: python-3.x function

第一个程序是逐步编写的,按照我的预期工作。这是在完全定义它之后,它抛出了我在标题中描述的错误。运行第二个后,我确实运行了第一个,错误就像我描述的那样。特别是在第一次第一次工作之后,我非常感觉到我的骨头。这是第一个

a = {"piz":12, "san":23, "dg":45}

def see(a):
    if "dg" in a:
        r = a["dg"]
    return r
print (r)

def see(r):
    return r + 1

print (see(r))

这就是错误。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/spyder/util/site/sitecustomize.py", line 880, in runfileexecfile(filename, namespace)
File "/usr/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/home/josh/python/viper.py", line 7, in <module>
print (r)
NameError: name 'r' is not defined

第二个功能是&#34;疯狂&#34;,它创建了一个变量&#34; e&#34;并且不会创造另一个,&#34; f&#34;。

d = 3
a = [1,2,3]

b = [4,5,6]

c = [7,8,9]

#The function just checks if "d" is in "a", then creates variables "e" and   "f"
def enclosing():
    def abc(a, d):
        if d in a:
            print ("yes")
            print (a[0])
    e = a[0]
    f = a[1]
    return

    print (e) 
    print (f)

它的错误。

File "/usr/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File "/usr/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/home/josh/python/d.py", line 25, in <module>
print (e)

NameError: name 'e' is not defined

1 个答案:

答案 0 :(得分:0)

您没有定义您想要的变量,或者您在该范围内未定义这些变量。首先,在第一个片段中,您已经两次定义了相同的函数,这绝不是一个好主意。在第一个定义中,仅在语句if "dg" in a:求值为True时定义r。因此,如果这是假的,则会出现错误(我建议在if语句之前为r设置占位符值)。

在第二个代码片段中,您在函数中定义了两个变量,然后尝试在函数外部访问它们。这些变量仅在函数范围内定义(在大多数语言中,包括python,函数中定义的变量是该函数的本地变量,并且不能在其外部访问),因此您必须将它们设置为返回函数的值或使它们成为全局变量。