python ast SyntaxError: неверный синтаксис по неизвестной причине - PullRequest
0 голосов
/ 11 мая 2019

У меня есть эта строка, которую я не контролирую и не написал, но мне нужно проанализировать ее, используя ast.ast не может справиться с этим.Но мне нужно знать почему?и как преодолеть эту проблему?

Вот мой код:

import ast

mystring = "https://111.com<xx>{'Server': 'openresty', 'Date': 'Fri, 19 Apr 2019 07:31:18 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding, Accept-Encoding', 'X-Rid': '5cbcdcf186159173e59ed3463f0b6ff3', 'P3p': 'CP="Tumblr's privacy policy is available here: https://www.tumblr.com/policy/en/privacy"', 'X-Xss-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Tumblr-User': 'the-absolute-best-posts', 'X-Tumblr-Pixel-0': 'https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovLzEwMDBub3Rlcy5jb20vIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIn0=&U=EJEPFDDMDN&K=36533553ca6c98c3ffa40d15855478b3c1f427a30be7a5eb4cd09256b4cd31a7--https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly8xMDAwbm90ZXMuY29tLyIsInJlcXR5cGUiOjAsInJvdXRlIjoiLyIsInBvc3RzIjpbeyJyb290X2Jsb2dpZCI6IjE4NjcxODA4Iiwicm9vdF9wb3N0aWQiOiIxMjMzNTczMjcxMSIsInBvc3RpZCI6IjE4NDI5MDIxOTE4OCIsImJsb2dp', 'X-Tumblr-Pixel-1': 'ZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiMjE0ODQzNTciLCJyb290X3Bvc3RpZCI6OTIyNTc2MTQxMTUsInBvc3RpZCI6IjE4NDI5MDAxNDkyOCIsImJsb2dpZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiNzMyMzk2NSIsInJvb3RfcG9zdGlkIjoiMTEwMjk5NjAyNDU2IiwicG9zdGlkIjoiMTg0Mjg5Nzk5OTY4IiwiYmxvZ2lkIjoiMTkzNDMzNyIsInNvdXJjZSI6MzN9LHsicm9vdF9ibG9naWQiOiI5NDg5NzU4Iiwicm9vdF9wb3N0aWQiOjQ1MzczNTgwMDc0LCJwb3N0aWQiOiIxODQyODk1NjkzNDgiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6Ij', 'X-Tumblr-Pixel-2': 'ExMTY2NTU5Iiwicm9vdF9wb3N0aWQiOiIxMjgyMDQ1MzczMTUiLCJwb3N0aWQiOiIxODQyODkzMjcyNTMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjU2NjI0Mzg2Iiwicm9vdF9wb3N0aWQiOjQyMzY1MDI4NDM1LCJwb3N0aWQiOiIxODQyODkwNjgzNjMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjcyMjc2MzI5Iiwicm9vdF9wb3N0aWQiOiIxMzc0ODA5NjA2NjciLCJwb3N0aWQiOiIxODQyODg4MDczNDMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM31dfQ==&U=LFCMCFJHJM&K=600602e5cc72d6cd698d22736e67fbcabad4b929587949814298', 'X-Tumblr-Pixel-3': '57d2040fa3bb', 'X-Tumblr-Pixel': '4', 'Link': '\<https://66.media.tumblr.com/avatar_6d0dd0685eab_128.pnj>; rel=icon', 'X-UA-Compatible': 'IE=Edge,chrome=1', 'Content-Encoding': 'gzip'}"

h = mystring.split("<xx>",1)[1]
h = ast.literal_eval(h.strip())

То, что я получаю, является неверной синтаксической ошибкой:

>   File "test.py", line 3
>     mystring = "https://111.com<xx>{'Server': 'openresty', 'Date': 'Fri, 19 Apr 2019 07:31:18 GMT', 'Content-Type': 'text/html;
> charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection':
> 'keep-alive', 'Vary': 'Accept-Encoding, Accept-Encoding', 'X-Rid':
> '5cbcdcf186159173e59ed3463f0b6ff3', 'P3p': 'CP="Tumblr's privacy
> policy is available here: https://www.tumblr.com/policy/en/privacy"',
> 'X-Xss-Protection': '1; mode=block', 'X-Content-Type-Options':
> 'nosniff', 'X-Tumblr-User': 'the-absolute-best-posts',
> 'X-Tumblr-Pixel-0':
> 'https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovLzEwMDBub3Rlcy5jb20vIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIn0=&U=EJEPFDDMDN&K=36533553ca6c98c3ffa40d15855478b3c1f427a30be7a5eb4cd09256b4cd31a7--https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly8xMDAwbm90ZXMuY29tLyIsInJlcXR5cGUiOjAsInJvdXRlIjoiLyIsInBvc3RzIjpbeyJyb290X2Jsb2dpZCI6IjE4NjcxODA4Iiwicm9vdF9wb3N0aWQiOiIxMjMzNTczMjcxMSIsInBvc3RpZCI6IjE4NDI5MDIxOTE4OCIsImJsb2dp',
> 'X-Tumblr-Pixel-1':
> 'ZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiMjE0ODQzNTciLCJyb290X3Bvc3RpZCI6OTIyNTc2MTQxMTUsInBvc3RpZCI6IjE4NDI5MDAxNDkyOCIsImJsb2dpZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiNzMyMzk2NSIsInJvb3RfcG9zdGlkIjoiMTEwMjk5NjAyNDU2IiwicG9zdGlkIjoiMTg0Mjg5Nzk5OTY4IiwiYmxvZ2lkIjoiMTkzNDMzNyIsInNvdXJjZSI6MzN9LHsicm9vdF9ibG9naWQiOiI5NDg5NzU4Iiwicm9vdF9wb3N0aWQiOjQ1MzczNTgwMDc0LCJwb3N0aWQiOiIxODQyODk1NjkzNDgiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6Ij',
> 'X-Tumblr-Pixel-2':
> 'ExMTY2NTU5Iiwicm9vdF9wb3N0aWQiOiIxMjgyMDQ1MzczMTUiLCJwb3N0aWQiOiIxODQyODkzMjcyNTMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjU2NjI0Mzg2Iiwicm9vdF9wb3N0aWQiOjQyMzY1MDI4NDM1LCJwb3N0aWQiOiIxODQyODkwNjgzNjMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjcyMjc2MzI5Iiwicm9vdF9wb3N0aWQiOiIxMzc0ODA5NjA2NjciLCJwb3N0aWQiOiIxODQyODg4MDczNDMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM31dfQ==&U=LFCMCFJHJM&K=600602e5cc72d6cd698d22736e67fbcabad4b929587949814298',
> 'X-Tumblr-Pixel-3': '57d2040fa3bb', 'X-Tumblr-Pixel': '4', 'Link':
> '\<https://66.media.tumblr.com/avatar_6d0dd0685eab_128.pnj>;
> rel=icon', 'X-UA-Compatible': 'IE=Edge,chrome=1', 'Content-Encoding':
> 'gzip'}"
> 
> 
> 
>     ^ SyntaxError: invalid syntax

Ответы [ 3 ]

0 голосов
/ 11 мая 2019

попробуйте этот синтаксис вместо

import ast

mystring = "https://111.com<xx>{'Server': 'openresty', 'Date': 'Fri, 19 Apr 2019 07:31:18 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding, Accept-Encoding', 'X-Rid': '5cbcdcf186159173e59ed3463f0b6ff3', 'P3p': 'CP='Tumblr\'s privacy policy is available here: https://www.tumblr.com/policy/en/privacy', 'X-Xss-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Tumblr-User': 'the-absolute-best-posts', 'X-Tumblr-Pixel-0': 'https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovLzEwMDBub3Rlcy5jb20vIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIn0=&U=EJEPFDDMDN&K=36533553ca6c98c3ffa40d15855478b3c1f427a30be7a5eb4cd09256b4cd31a7--https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly8xMDAwbm90ZXMuY29tLyIsInJlcXR5cGUiOjAsInJvdXRlIjoiLyIsInBvc3RzIjpbeyJyb290X2Jsb2dpZCI6IjE4NjcxODA4Iiwicm9vdF9wb3N0aWQiOiIxMjMzNTczMjcxMSIsInBvc3RpZCI6IjE4NDI5MDIxOTE4OCIsImJsb2dp', 'X-Tumblr-Pixel-1': 'ZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiMjE0ODQzNTciLCJyb290X3Bvc3RpZCI6OTIyNTc2MTQxMTUsInBvc3RpZCI6IjE4NDI5MDAxNDkyOCIsImJsb2dpZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiNzMyMzk2NSIsInJvb3RfcG9zdGlkIjoiMTEwMjk5NjAyNDU2IiwicG9zdGlkIjoiMTg0Mjg5Nzk5OTY4IiwiYmxvZ2lkIjoiMTkzNDMzNyIsInNvdXJjZSI6MzN9LHsicm9vdF9ibG9naWQiOiI5NDg5NzU4Iiwicm9vdF9wb3N0aWQiOjQ1MzczNTgwMDc0LCJwb3N0aWQiOiIxODQyODk1NjkzNDgiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6Ij', 'X-Tumblr-Pixel-2': 'ExMTY2NTU5Iiwicm9vdF9wb3N0aWQiOiIxMjgyMDQ1MzczMTUiLCJwb3N0aWQiOiIxODQyODkzMjcyNTMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjU2NjI0Mzg2Iiwicm9vdF9wb3N0aWQiOjQyMzY1MDI4NDM1LCJwb3N0aWQiOiIxODQyODkwNjgzNjMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjcyMjc2MzI5Iiwicm9vdF9wb3N0aWQiOiIxMzc0ODA5NjA2NjciLCJwb3N0aWQiOiIxODQyODg4MDczNDMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM31dfQ==&U=LFCMCFJHJM&K=600602e5cc72d6cd698d22736e67fbcabad4b929587949814298', 'X-Tumblr-Pixel-3': '57d2040fa3bb', 'X-Tumblr-Pixel': '4', 'Link': '\<https://66.media.tumblr.com/avatar_6d0dd0685eab_128.pnj>; rel=icon', 'X-UA-Compatible': 'IE=Edge,chrome=1', 'Content-Encoding': 'gzip'}"

h = mystring.split("<xx>",1)[1]
h = ast.literal_eval(h.strip())

у вас была проблема с двойными кавычками в 'P3p': 'CP="Tumblr's ....

0 голосов
/ 11 мая 2019

Попробуйте это

import ast

mystring = "https://111.com<xx>{'Server': 'openresty', 'Date': 'Fri, 19 Apr 2019 07:31:18 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding, Accept-Encoding', 'X-Rid': '5cbcdcf186159173e59ed3463f0b6ff3', 'P3p': 'CP=\"Tumblr\\'s privacy policy is available here: https://www.tumblr.com/policy/en/privacy\"', 'X-Xss-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Tumblr-User': 'the-absolute-best-posts', 'X-Tumblr-Pixel-0': 'https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoidXJsIiwidXJsIjoiaHR0cDovLzEwMDBub3Rlcy5jb20vIiwicmVxdHlwZSI6MCwicm91dGUiOiIvIn0=&U=EJEPFDDMDN&K=36533553ca6c98c3ffa40d15855478b3c1f427a30be7a5eb4cd09256b4cd31a7--https://px.srvcs.tumblr.com/impixu?T=1555659077&J=eyJ0eXBlIjoicG9zdCIsInVybCI6Imh0dHA6Ly8xMDAwbm90ZXMuY29tLyIsInJlcXR5cGUiOjAsInJvdXRlIjoiLyIsInBvc3RzIjpbeyJyb290X2Jsb2dpZCI6IjE4NjcxODA4Iiwicm9vdF9wb3N0aWQiOiIxMjMzNTczMjcxMSIsInBvc3RpZCI6IjE4NDI5MDIxOTE4OCIsImJsb2dp', 'X-Tumblr-Pixel-1': 'ZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiMjE0ODQzNTciLCJyb290X3Bvc3RpZCI6OTIyNTc2MTQxMTUsInBvc3RpZCI6IjE4NDI5MDAxNDkyOCIsImJsb2dpZCI6IjE5MzQzMzciLCJzb3VyY2UiOjMzfSx7InJvb3RfYmxvZ2lkIjoiNzMyMzk2NSIsInJvb3RfcG9zdGlkIjoiMTEwMjk5NjAyNDU2IiwicG9zdGlkIjoiMTg0Mjg5Nzk5OTY4IiwiYmxvZ2lkIjoiMTkzNDMzNyIsInNvdXJjZSI6MzN9LHsicm9vdF9ibG9naWQiOiI5NDg5NzU4Iiwicm9vdF9wb3N0aWQiOjQ1MzczNTgwMDc0LCJwb3N0aWQiOiIxODQyODk1NjkzNDgiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6Ij', 'X-Tumblr-Pixel-2': 'ExMTY2NTU5Iiwicm9vdF9wb3N0aWQiOiIxMjgyMDQ1MzczMTUiLCJwb3N0aWQiOiIxODQyODkzMjcyNTMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjU2NjI0Mzg2Iiwicm9vdF9wb3N0aWQiOjQyMzY1MDI4NDM1LCJwb3N0aWQiOiIxODQyODkwNjgzNjMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM30seyJyb290X2Jsb2dpZCI6IjcyMjc2MzI5Iiwicm9vdF9wb3N0aWQiOiIxMzc0ODA5NjA2NjciLCJwb3N0aWQiOiIxODQyODg4MDczNDMiLCJibG9naWQiOiIxOTM0MzM3Iiwic291cmNlIjozM31dfQ==&U=LFCMCFJHJM&K=600602e5cc72d6cd698d22736e67fbcabad4b929587949814298', 'X-Tumblr-Pixel-3': '57d2040fa3bb', 'X-Tumblr-Pixel': '4', 'Link': '\<https://66.media.tumblr.com/avatar_6d0dd0685eab_128.pnj>; rel=icon', 'X-UA-Compatible': 'IE=Edge,chrome=1', 'Content-Encoding': 'gzip'}"

h = mystring.split("<xx>",1)[1]
h = ast.literal_eval(h.strip())

У вас есть " в вашей цитате (и ' в этой цитате), что портит анализ. Вам нужно сбежать от них

'P3p': 'CP=\"Tumblr\\'s privacy policy is available here: https://www.tumblr.com/policy/en/privacy\"',

Почему вы хотите поместить эту строку и разобрать ее с ast в любом случае? Должен быть лучший способ получить то, что вы хотите. Может быть, сохранить файл JSON и json.load() или json.loads() это?

0 голосов
/ 11 мая 2019

Вы получаете синтаксическую ошибку, потому что строка / json содержит двойные кавычки, которые преждевременно заканчивают объявление строки. В результате Python пытается интерпретировать остальное в действительном коде Python, который, конечно, не является.

Эта часть, кажется, проблема:

3p': 'CP="Tumblr's privacy policy is available...
...