【问题标题】:python eval error with converting string to dictpython eval错误将字符串转换为dict
【发布时间】:2018-07-27 07:15:48
【问题描述】:

我正在使用 python,当我对字符串执行 eval 以获取字典时,它向我显示错误“SyntaxError:无效语法” 该字符串是通过套接字连接接收的,它包含一个字典。 我需要取回原来的字典

确切的错误如下

File "<string>", line 1 
##here goes my long string received over socket
                                   ^
SyntaxError: invalid syntax

我不知道这是怎么回事。 我知道我可以使用 pickle 或 json 来发送数据,但这不是目前的要求

【问题讨论】:

  • 请提供发生错误的(最小)代码
  • 这是我的客户端代码,它在服务器端发送字符串 DataValue = str(data_info) message = DataValue sock.send(message.encode()) 我在套接字上接收数据并简单地执行 dataStr = eval(data) ##数据为接收数据

标签: python string python-3.x dictionary eval


【解决方案1】:

首先,永远不要使用eval,除非您有一个非常特殊的用例需要它:它会带来安全风险。请改用ast.literal_eval

其次,我无法重现您的错误:

import ast

mystr = "{'a': 1, 'b': 2, 'c': 3, 'd': 4}"

ast.literal_eval(mystr)        # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
type(ast.literal_eval(mystr))  # dict

【讨论】:

  • 我在 linux 上运行相同的逻辑并且工作正常,但是当我切换到 Windows 时出现错误。我见过 ast,当我这样做时它工作正常,但是当我使用我的代码运行时,我得到了同样的旧错误。
  • 不,你给我的代码我没有收到任何错误。当我在我的代码中尝试这个时,我在实现它之前也尝试过它我得到错误
  • 好的,除非您提供您的代码和完整的回溯,否则我无能为力。
  • 这是我的客户端代码,它在服务器端发送字符串 DataValue = str(data_info) message = DataValue sock.send(message.encode()) 我在套接字上接收数据并简单地执行 dataStr = eval(data) ## data 是在回溯中接收到的数据 我只是得到 invalid syntax
  • 发布您的代码,格式正确,作为您问题的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 2013-05-25
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多