0
x='''
print '\tone \'piece\' of \"metal\" with \\sharp\\ edge '
print '\nthanks'
'''
exec(x)

我有一个字符串变量 (x),我想使用 exec() 正确打印出来。如果我可以访问变量,我可以直接使用 r' 并解决问题,例如:

x=r'''
print '\tone \'piece\' of \"metal\" with \\sharp\\ edge '
print '\nthanks'
'''
exec(x)

但在这种情况下,我无权访问该变量。所以字符串变量来自另一端或其他用户。那么如何将此 r' 应用于现有变量,以便我可以使用 exec() 。

正确的输出应该是:

    one 'piece' of "metal" with \sharp\ edge 

thanks

真实情况是:

在我的软件中,我可以创建对象,每个对象都可以具有文本输入和按钮等属性。我将此文本输入和按钮属性称为object.text_inputobject.button。假设我有 2 个名为AABB的对象,并且我在AA.text_input(object1 的文本输入)中键入了一个表达式/脚本。现在从 BB (object2) 我想使用在AA.text_input中输入的表达式并使用exec()执行它。所以在BB.button我会写一个代码,如:exec(AA.text_input). 所以我从 AA 获取的数据将是一个字符串。问题是 AA 文本输入中的代码类型可能包含任何字符,包括转义字符和其他字符。因此,当我在 BB 中使用 exec() 时,我会因为这些字符而出错。所以问题是:如何将该字符串从 BB.text_input 正确带到 AA?

4

1 回答 1

0

据我了解,一旦声明了'x',它就会丢失所有输入的字符的记忆,例如,它用换行符替换'\n'。

我能想到的唯一方法是编写一个语句,用原始字符替换 x 中的所有字符。

例如:

for char in x:
    if char == '\n':
         #replace with '\\n'

编辑:对于这个例子,一种方法是

x = x.replace('\\', '\\\\')
x = x.replace('\n', '\\n')
x = x.replace('\t', '\\t')
x = x.replace('\"', '\\\"')
x = x.replace('\'', '\\\'')
于 2017-08-15T11:16:01.827 回答