Python:eval字符串,结尾为\n

Python:eval字符串,结尾为\n,python,python-2.7,Python,Python 2.7,如何对具有的字符串执行求值\n 为什么这不起作用 a = eval('"hello \n"') In [70]: eval("\"hello \n\"") File "<string>", line 1 "hello ^ SyntaxError: EOL while scanning string literal 我的用例是,通过子流程执行的脚本将字典输出为字符串,我正在捕获它的标准输出,并希望对其执行评估 '''[ { "hello":

如何对具有的字符串执行求值\n

为什么这不起作用

a = eval('"hello \n"')
In [70]: eval("\"hello \n\"")
  File "<string>", line 1
    "hello
          ^
SyntaxError: EOL while scanning string literal
我的用例是,通过子流程执行的脚本将字典输出为字符串,我正在捕获它的标准输出,并希望对其执行评估

'''[
     { "hello": "the description of this is\' \n"}
]'''

你需要避开反斜杠

>>> eval('"hello \n"')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    "hello
          ^
SyntaxError: EOL while scanning string literal
>>> eval('"hello \\n"')
'hello \n'
>>> print(eval('"hello \\n"'))
hello

>>>
而不是所需的代码:

"hello \n"

如果要指定包含文字
\
n
的字符串,则需要将反斜杠加倍,或使用原始字符串文字:

>>> '"hello\\n"'
'"hello\\n"'
>>> r'"hello\n"'
'"hello\\n"'
>>> eval(r'"hello\n"')
'hello\n'
然后,可以将此类字符串计算为包含字符串文字的Python表达式:

>>> '"hello\\n"'
'"hello\\n"'
>>> r'"hello\n"'
'"hello\\n"'
>>> eval(r'"hello\n"')
'hello\n'
如果您的输出是由使用
pprint.pprint()
输出值的子进程生成的,那么您所做的不仅仅是读取该流,因为这会生成完全有效的Python语法。例如,不要将该输出复制并粘贴到Python解释器中,因为这只会直接解释转义序列(所以在将其传递给
eval()
之前)。若您是在解释器中开发的,那个么可以使用来生成带有输出的变量,而不是写入标准输出


但是,如果您试图使用Python
repr()
pprint.pprint()
输出在系统之间传递数据,请立即停止。使用适当的序列化格式,例如JSON。如果这不是一个选项,至少可以使用它来限制代码只接受Python文本,而不接受任意代码(例如
“\uuu import\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?即使没有换行符,您到底希望
eval(“hello”)
做什么?您的第二个示例只是将一个字符串赋给一个变量。我希望它返回一个字符串p.s.它不是eval(“hello”)而是eval(““hello”)用例是什么?为什么需要在字符串上调用eval?为什么它需要有“\n”?如果你能分享更多关于这个问题的信息,我们可以帮助你more@Har:
eval(pprint.pformat('hello\n'))
工作得很好,因为
pprint.pformat()
返回打印的字符串,而不是将其写入stdout。@Har:如果在父进程中使用
pprint.pprint()
并从stdout读取,
`和
n`也是独立的字符,可以传递给
eval()
。这仍然是个坏主意,因为它很慢,而且还有更好的选择
ast.literal\u eval()
限制了只加载Python文本的代码(安全),但是JSON对于这种交换速度要快得多。我对什么需要转义和什么不需要转义感到困惑,你能澄清一下吗?例如,如果我有eval(“‘hello’s\n’”),则需要将其更改为eval(“‘hello\'\\n’”),哪些字符需要转义?如果字符串不是来自文字,正如您在编辑中提到的,您可以查看一下。您是否可以提及关于pprint.p格式以及关于编码/解码字符串的建议__import_uuuz(“os”).system(“rm-rf/”)确实是一个很好的例子,说明了为什么不将外部字符串当作python代码来使用:)