我正在尝试读取包含Python表达式的字符串,并尝试使用ast.literal_eval对它们进行计算。预期的结果应该是dict。相反我得到了str。我做错了什么?
test.txt
{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 Fix:这是在引用、、和的报价后的输出,如下所示。他们是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'> 发布于 2014-05-24 02:17:03
因为代码用引号包围了行。
您需要用引号包围prompt和command,而不是整条线。
https://stackoverflow.com/questions/23840688
复制相似问题