我正在尝试读取包含Python表达式的字符串,并尝试使用ast.literal_eval
来评估它们。
预期结果应为dict
。相反,我得到str
。
我做错了什么?
{prompt : 'prompt1> ' , command : 'cmd1'}
{prompt : 'prompt2> ' , command : 'cmd2'}
{prompt : 'prompt3> ' , command : 'cmd3'}
{prompt : 'prompt4> ' , command : 'cmd4'}
def send_commands(commands):
with open(commands, 'r') as file:
current_line = ast.literal_eval('"' + next(file).rstrip("\n") + '"')
for next_line in file:
next_line = ast.literal_eval('"' + next_line.rstrip("\n") + '"')
print(current_line)
print(next_line)
print("type:", type(current_line), type(next_line))
current_line = next_line
import ast
commands = "test.txt"
send_commands(commands)
{prompt : 'prompt1> ' , command : 'cmd1'}
{prompt : 'prompt2> ' , command : 'cmd2'}
type: <class 'str'> <class 'str'>
{prompt : 'prompt2> ' , command : 'cmd2'}
{prompt : 'prompt3> ' , command : 'cmd3'}
type: <class 'str'> <class 'str'>
{prompt : 'prompt3> ' , command : 'cmd3'}
{prompt : 'prompt4> ' , command : 'cmd4'}
type: <class 'str'> <class 'str'>
修复:以下是'prompt
和command
引用后的输出,如下所示。它们是dict
但是互换了。可能是因为eval
根据第一个字符的十六进制值进行了一些排序。
{'command': 'cmd1', 'prompt': 'prompt1> '}
{'command': 'cmd2', 'prompt': 'prompt2> '}
type: <class 'dict'> <class 'dict'>
{'command': 'cmd2', 'prompt': 'prompt2> '}
{'command': 'cmd3', 'prompt': 'prompt3> '}
type: <class 'dict'> <class 'dict'>
{'command': 'cmd3', 'prompt': 'prompt3> '}
{'command': 'cmd4', 'prompt': 'prompt4> '}
type: <class 'dict'> <class 'dict'>
答案 0 :(得分:1)
因为代码用引号括起来。
您需要用引号括起prompt
和command
,而不是整行。