我对python还是个新手。我正在为一个更大的项目工作。这个程序让你想到一个圆形或正方形,然后问四个问题,然后决定一个答案。在
我正在执行框架的最后一步,但遇到了一个问题。我得到“未定义全局名‘qas1’”
Line 50 in getQuestion question = 'qas' Global name 'qas' is not defined
当我试图腌制元组的时候就发生了这种事。在
下面是我的加载程序,用于创建包含元组的pickle文件:
import cPickle
import os
qas1 = [
('Are you more like Waffle or a Pancake'),
('1. Waffle', 1, 0),
('2. Pancake', 0, 1)
]
qas2 = [
('Do you have a straight edge?'),
('1. Yes', 1, 0),
('2. No', 0, 1)
]
qas3 = [
('Are you simliar in shape to a lolipop?'),
('1. Yes', 0, 1),
('2. No', 1, 0)
]
qas4 = [
('Is the world rounded like a planet, or flat like a map?'),
('1. Rounded', 0, 1),
("2. Flat", 1, 0)
]
def hasFile():
print 'I see the file'
qas_file = open('qas.dat', 'r')
qas1 = cPickle.load(qas_file)
qas2 = cPickle.load(qas_file)
qas3 = cPickle.load(qas_file)
qas4 = cPickle.load(qas_file)
qas_file.close
confirmer()
def noFile():
print 'I dont see a file...'
saver()
def confirmer():
print qas1
print qas2
print qas3
print qas4
def saver():
qas_file = open('qas.dat', 'w')
print 'No worries, creating one now'
cPickle.dump(qas1, qas_file)
cPickle.dump(qas2, qas_file)
cPickle.dump(qas3, qas_file)
cPickle.dump(qas4, qas_file)
qas_file.close
print 'all done'
fname = "qas.dat"
if os.path.isfile(fname):
hasFile()
else:
noFile()
代码工作正常,但当我试图使用它创建的文件时遇到了问题。在
^{pr2}$我知道,这需要看很多代码。当程序第一次加载名称qas1
时,它会重新确认它是一个元组,但是当我试图将属性传递给getQuestion()
中的'question'时:它忘记了它们是什么。有什么理想问题吗?在
在第二个文件中,qas[1-4]都是
hasFile
函数的本地函数。使它们全球化,您的代码将起作用:在第一个代码中也出现了同样的错误,但更难注意到——这四个变量仍然只在函数中赋值——这使得同名的全局变量变得模糊,保持不变。但是,由于加载它们不会改变它们的内容,所以它似乎可以工作。在
当您只需为qas这样的变量分配一个新值时,就像您在
hasFile()
中所做的那样,您正在创建一个局部变量。。。不是全球性的。在简单地分配之前,请确保指定global qas
。在在hasFile()中,您设置了qas1、qas2、qas3和qas4的值,但没有首先将它们声明为global,这意味着它们没有在全局范围内设置。在
在每个设置全局变量的函数中,都需要显式地将它们声明为全局变量。见the answers to this question。在
另外,在将来,考虑将值传递给函数,而不是使用全局变量,这很容易出错,特别是对于初学者。在
相关问题 更多 >
编程相关推荐