python ast SyntaxError:语法无效,原因未知

2024-05-29 02:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个我不控制或编写的字符串,但需要使用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

Tags: httpscomtypepolicytumblrcontentastencoding
3条回答

您将得到一个语法错误,因为string/json包含双引号,这会过早地结束字符串的声明。结果是Python试图用有效的Python代码解释其余的代码,当然不是这样。你知道吗

这部分似乎是问题所在:

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

请尝试使用此语法

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 ....处遇到双引号问题

试试这个

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()它?你知道吗

相关问题 更多 >

    热门问题