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

私は文字列変数(x)を持っていて、正しく出力するためにexec()を使いたいです。私は直接のような、R」および問題解決を使用することができます変数にアクセスしている場合:python:キャストしたり、変数の文字列をrawに変換する方法

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

しかし、この場合は、私は変数にアクセスすることはできません。文字列変数は、他のエンドまたは他のユーザーから来ます。どのように私はexec()を使用することができますので、私は既存の変数にこのr 'を適用することができます。

正しい出力は次のようになります。

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

thanks 

実際のケースがある:私のソフトウェアインサイド

、私はオブジェクトを作成することができ、それぞれこのオブジェクトは、テキスト入力やボタンなどの性質を持つことができます。このテキストの入力とボタンのプロパティは、object.text_inputobject.buttonとなります。例えば、AABBの2つのオブジェクトがあり、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

生の文字列は、インタプリタがタイプ可能なものから適切なバイトに到着するのに役立ちます。バイトがすでに存在する場合、多くの正当性が残っていません。だから、どちらのフォーマットがもう一方の端から来て、代わりに何を期待していますか? – guidot

+0

私は上記の質問を更新しました。plsは見ています。たくさんありがとうございます – andio

答えて

0

私が理解する限り、一度 'x'が宣言されると、どのような文字が入力されたのかをすべて知ることができなくなります。 '\ n'を改行文字に置き換えます。

これを元に戻すことを考える唯一の方法は、xのすべての文字を元の文字に置き換える文を書くことです。例えば

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

編集:この例では、これを行う1つの方法、

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' = "print 'test \' fail \ 'などの' or 'あなたが言ったように、 'x'が宣言された後、 'と\'の文字はメモリを失っているので、私の例では 'と\'は同じものとして保存されます。今度は文字列になります:** print 'test' fail '' **。** \ **を失った場合x.replaceを使用すると、すべての ''を置き換えます。\ n \ tなどのエスケープ文字をBtwに置き換えますx.encode( 'string_escape')を使って解決することができますが、私は単一のqoutと二重引用符の問題を処理する必要があります。 – andio

+0

上記の例をテストしたところ、 '' 'と' ''を置き換えて動作するようですが、それらの三つ組のバックスラッシュを入れていますか? '' print '' test \ 'fail \' \ '' – Dant

関連する問題