我已经实现了一种编写和读取 python 字典的简单方法,但是,我无法理解为什么它不能作为函数工作。
要保存字典,我使用以下命令:
def saveHash():
print "Saving hash file to ./savedHash"
f = open('savedHash','w')
f.write(str(my_hash))
f.close()
print "Save Successfull"
saveHash()
这工作得很好。现在要在我做的脚本中加载我的字典:
def loadHash(name):
print "Loading hash file %s" % (name)
f = open(name,'r')
my_hash = eval(f.read())
f.close()
print "Hash loaded"
loadHash('savedHash')
问题是它似乎在我正在运行的脚本中不起作用,但它会在 shell 中起作用。如果我savedHash
在我的目录中/home/dan/
并在该目录中打开一个 python shell,则运行loadHash('savedHash')
orloadHash('./savedHash')
或者loadHash('/home/dan/savedHash')
它不填充字典/哈希。当我这样做random.choice(my_hash.keys())
时失败并返回此错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/projects/dan/software/Python-2.7.2/Lib/random.py", line 274, in choice
return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty
IndexError: list index out of range
但是,如果我按以下命令运行命令:
>>> f = open(name,'r')
>>> my_hash = eval(f.read())
>>> f.close()
我可以输入print random.choice(my_hash.keys())
并从中获取值。有谁知道为什么它不能在脚本中工作,但它会在 shell 中工作?我正在使用参数解析器来获取文件名。