2014-11-21 3 views
1

Я новичок в python и пытаюсь получить данные запроса, используя ast.literal_eval, что приводит к ошибке «недопустимый синтаксис».Запрос Python с использованием ошибки ast.literal_eval Недопустимый синтаксис?

Он печатает данные я отправить это формат, как,

192.156.1.0,8181,database,admin,12345 

В питоне я отобразить его, но получаю ошибку при чтении мой код,

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'] 

Invalid синтаксическая ошибка в строке данных = ast.literal_eval (datas)

Как его решить предложение будет заметным

Благодаря

+0

этот dosent выглядит как выражение python – Hackaholic

+0

@Hackaholic это часть службы python и ошибки, которую я получаю в строке, о которой я упоминал. – user3664724

+0

'192.156.1.0,8181, database, admin, 12345' не является выражением python – Hackaholic

ответ

3

изменить это:

192.156.1.0,8181,database,admin,12345 

к этому:

>>> a = "['192.156.1.0',8181,'database','admin',12345]" 
>>> ast.literal_eval(a) 
['192.156.1.0', 8181, 'database', 'admin', 12345] 

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 

сколь угодно сложные выражения, например, с участием операторов или индексации.

вы можете попробовать, как это:

>>> 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'] 

ваш код будет выглядеть следующим образом:

data=ast.literal_eval(str(map(str,datas.split(',')))) 
+0

192.156.1.0.8181, database, admin, 12345 отправляется с http POST, как изменить его на строку. – user3664724

+0

@ user3664724 проверить edit :) – Hackaholic

+0

ok дайте мне проверить – user3664724

2

А что-то вроде

dbname, username, ip, port, pwd = request.body.read().split(',') 

Тест

>>> str = "192.156.1.0,8181,database,admin,12345" 
>>> dbname , username , ip, port ,pwd = str.split(',') 
>>> dbname 
'192.156.1.0' 
>>> username 
'8181' 
>>> ip 
'database' 
>>> port 
'admin' 
>>> pwd 
'12345' 
+0

не могу это сделать, любой может ввести вредоносный код – Hackaholic

+0

192.156.1.0,8181, database, admin, 12345 commin from http POST как преобразовать его в строку? – user3664724

+0

'str (request.body.read())' будет делать. как в вашем коде. см. инструкцию 'print' – nu11p01n73R

 Смежные вопросы

  • Нет связанных вопросов^_^