使用 ast.literal_eval 错误的 Python 请求语法无效?

use*_*724 2 python parsing json http httprequest

我是 python 新手,并尝试使用 ast.literal_eval 获取请求数据,导致“语法无效”错误。

它打印我发送的数据,格式如下,

192.156.1.0,8181,database,admin,12345
Run Code Online (Sandbox Code Playgroud)

在python中我显示它但在阅读它时出错我的代码是,

    print str(request.body.read())
    datas = request.body.read()
    data=ast.literal_eval(datas)
    dbname = data['dbname']
    username = data['uname']
    ip = data['ip']
    port = data['port']
    pwd = data['pwd']
Run Code Online (Sandbox Code Playgroud)

data=ast.literal_eval(datas)上的无效语法错误

如何解决它的建议将是可观的

谢谢

Hac*_*lic 5

改变这个:

192.156.1.0,8181,database,admin,12345
Run Code Online (Sandbox Code Playgroud)

对此:

>>> a = "['192.156.1.0',8181,'database','admin',12345]"
>>> ast.literal_eval(a)
['192.156.1.0', 8181, 'database', 'admin', 12345]
Run Code Online (Sandbox Code Playgroud)

ast.literal_eval

ast.literal_eval(node_or_string)

Safely evaluate an expression node or a Unicode or Latin-1 encoded string containing
a Python literal or container display. The string or node provided may only consist of 
the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.

 This can be used for safely evaluating strings containing Python values from untrusted 
sources without the need to parse the values oneself. It is not capable of evaluating 
Run Code Online (Sandbox Code Playgroud)

任意复杂的表达式,例如涉及运算符或索引。

你可以这样尝试:

>>> a='192.156.1.0,8181,database,admin,12345'
>>> a = str(map(str,a.split(',')))
>>> a
"['192.156.1.0', '8181', 'database', 'admin', '12345']"
>>> ast.literal_eval(a)
['192.156.1.0', '8181', 'database', 'admin', '12345']
Run Code Online (Sandbox Code Playgroud)

您的代码将如下所示:

data=ast.literal_eval(str(map(str,datas.split(','))))
Run Code Online (Sandbox Code Playgroud)