2017-08-15 127 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

相關問題