2017-08-15 87 views
0
x=''' 
print '\tone \'piece\' of \"metal\" with \\sharp\\ edge ' 
print '\nthanks' 
''' 
exec(x) 

我有一个字符串变量(x),我想用exec()将其正确打印出来。如果我有机会获得变量i可以直接使用R”和问题解决,如:python:如何将一个变量中的字符串转换或转换为raw

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。假设我有两个对象,分别命名为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?

+2

什么是你要解决真正的问题? – holdenweb

+0

原始字符串是interpreeter从可键入的东西到达适当的字节的帮助。如果字节已经存在,则没有太多理由。那么:哪种格式来自另一端,你期望什么? – guidot

+0

我有更新我的问题上面,请看看。谢谢很多 – andio

回答

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('\'', '\\\'') 
+0

我的错误,是为了'=='。已编辑 – Dant

+0

谢谢,这就是我在想什么,转义字符像\ n或\ t等可以处理,但我无法处理'或',例如** x =“打印”测试\“失败\” ''**正如你所说的,'x'声明后,'和'字符正在丢失内存,所以在我的例子中,'和'将被存储为'。'当我尝试重新加载它时,现在字符串变成了:** print'test'fail''**。我丢失了** \ **。如果我使用x.replace,它会替换掉所有'。几乎可以使用x.encode('string_escape')来解决,但我需要处理单个qout和双引号问题。 – andio

+0

我测试了我的上面的例子,它似乎与替换'''和'''一起工作。你是否为这些加入了三反斜杠?它们需要3个,因为它们不像'n'和't'是 当我在'x =“print'test''上尝试失败\'''','print x'输出'print \'test \'fail \'''' – Dant

相关问题