如何在Python中使用exec()和新行?

时间:2017-04-10 16:13:41

标签: python python-3.x python-requests newline

我有一个网站只发送几行Python。我使用请求连接到此站点并获取它,但它已经在其中。这是我的意思的一个例子:

import requests
r = r.get("www.example.com")
t = r.text
exec(t)

变量t有新行。这是错误:

>>> exec(t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    import time\nprint(time.time())
                              ^
SyntaxError: unexpected character after line continuation character

另一件事:在从中检索它的网页上,它是一个\ n,但是t的值有\ n而不是\ n。我不知道我能做些什么来解决这个问题。

1 个答案:

答案 0 :(得分:3)

如果你的字符串实际上包含换行符,这将正常工作。您从服务器返回的字符串甚至不包含换行符 - 它实际上包含&#34; \ n&#34;。请参阅下面的示例演示:

>>> t = 'import time\\nprint(time.time())'
>>> exec(t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    import time\nprint(time.time())
                                  ^
SyntaxError: unexpected character after line continuation character
>>> t = 'import time\nprint(time.time())'
>>> exec(t)
1491841224.27

注意第一行如何包含文字&#34; \ n&#34;,而第二次我定义t我实际上使用的是真正的换行符。在第一个示例中,它给出了与您相同的错误,让我相信这是您的问题。

因此,要解决此问题,您必须修改服务器(因为您声称它是您的网站)以返回带有实际换行符的数据,或者,如果您不想(或可以& #39; t)修改服务器,你必须用实际的换行符或用分号替换&#34; \ n&#34; s。一种方法是t.replace('\\n', '\n')。因此,如果您决定以这种迂回方式修复它,您的代码将如下所示:

import requests
r = r.get("www.example.com")
t = r.text
exec(t.replace('\\n', '\n'))

但是,如果您修复了网站,您的代码可能与您的问题看起来完全一样,并且工作正常。