Python程序将字典视为字符串
我设置了一个字典,并从一个文件中填充了它,像这样:
filedusers = {} # cheap way to keep track of users, not for production
FILE = open(r"G:\School\CS442\users.txt", "r")
filedusers = ast.literal_eval("\"{" + FILE.readline().strip() + "}\"")
FILE.close()
然后我对它进行了测试,像这样:
if not filedusers.get(words[0]):
这里的 words[0]
是一个用户名的字符串,但我遇到了以下错误:
'str' object has no attribute 'get'
不过我已经确认在 FILE.close()
之后,我确实有一个字典,并且里面的值都是正确的。
你知道发生了什么吗?
3 个回答
1
Python是一种动态类型的编程语言,这意味着你不需要在定义变量时指定它的类型。你可以很随意地定义变量。比如,你最开始把filedusers
定义成一个字典,然后又通过给它赋值ast.literal_eval
的结果,把它重新定义成了一个字符串。
补充说明:你需要去掉那些引号。ast.literal_eval('"{}"')
的结果是一个字符串,而ast.literal_eval('{}')
的结果是一个字典。
3
>>> import ast
>>> username = "asd: '123'"
>>> filedusers = ast.literal_eval("\"{" + username + "}\"")
>>> print filedusers, type(filedusers)
{asd} <type 'str'>
你并没有一个字典,它看起来像一个。你其实只有一个字符串。
5
literal_eval 是一个函数,它可以把一个字符串转换成 Python 对象。所以,下面的说法是正确的...
ast.literal_eval('{"a" : 1}')
>> {'a' : 1}
不过,你加了一些不必要的引号。如果你的文件里只是一个空字典({}
),那么你创建的字符串看起来会是这样的...
ast.literal_eval('"{}"') # The quotes that are here make it return the string "{}"
>> '{}'
所以,解决办法就是把这一行改成...
ast.literal_eval("{" + FILE.readline().strip() + "}")
...或者...
ast.literal_eval(FILE.readline().strip())
...这要看你的文件格式。否则,literal_eval 会把你的字符串当成一个真正的字符串来看,因为有引号的原因。