2015-10-08 8 views
5

明らかに、ur""の構文はPython 3では無効になっています。しかし、私はそれが必要です! 「なぜですか?」、あなたが尋ねるかもしれません。まあ、uという接頭辞はユニコード文字列であり、コードはPython 2で動作する必要があります。r接頭辞は多分必須ではありませんが、私が使用しているマークアップ形式には多くのバックスラッシュが必要です間違いを避けるために役立ちます。Python 2とPython 3で有効な未加工のUnicodeリテラル?

ここ

は、私はPythonの2で何をしたいんが、Pythonの3に違法である例である:

tamil_letter_ma = u"\u0bae" 
marked_text = ur"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 

この問題に出くわすの後、私はhttp://bugs.python.org/issue15096を発見し、この引用気づい:

をその限界を克服するのは簡単です。

どのように考えてもらえませんか?

関連:What exactly do "u" and "r" string flags do in Python, and what are raw string literals?

答えて

9

のPython 2にurと同じように生成されますのみrを使用して、Pythonの3.xではデフォルトです文字列リテラル(r'....')の場合、uを指定する必要はありません。これは、Python 3では文字列がUnicode文字列であるためです。

>>> tamil_letter_ma = "\u0bae" 
>>> marked_text = r"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 
>>> marked_text 
'\\aம\\bthe Tamil\\cletter\\dMa\\e' 

、それはまた、ソースコード内の文字列リテラル内のUnicodeになるように、ソースコードの先頭にthe following Future import statementを追加し、Pythonの2.xで動作させるために。

-1

Unicode文字列は、なぜあなただ​​けの生の使用していない

+0

-1;これは、Python 2とPython 3の両方で同時に有効な生のUnicodeリテラルを書く方法である質問のポイントを逃している。 –

1
from __future__ import unicode_literals 

好ましい方法はu''プレフィックスを削除し@falsetru suggestedとしてfrom __future__ import unicode_literalsを使用することです。 python3について

>>> tamil_letter_ma = u"\u0bae" 
>>> marked_text = r"\a%s\bthe Tamil\cletter\dMa\e" % tamil_letter_ma 
>>> marked_text 
u'\\a\u0bae\\bthe Tamil\\cletter\\dMa\\e' 
-1

:しかし、あなたの特定のケースでは、あなたが実際にその"ascii-only string" % unicode返すUnicodeを悪用する可能性があり、すべての文字列は、デフォルトでは常にUnicodeです。 uという接頭辞は機能を失い、その言語から削除されました。

しかし、バージョン3.3からは、Python2からの移植を容易にするために、uが再び受け入れられ(無視されます)。

文字列Python3とPython2を互換性のある方法の1つは、3年前にリリースされたバージョン3.3+を必要とすることです。

+0

-1;この質問は 'u'接頭文字列だけでなく特に' ur'接頭文字列に関するもので、 'ur'はPython 3.3以降でサポートされていません。 –

+0

@MarkAmery:ご意見ありがとうございました。ご迷惑をおかけして申し訳ありません。 – VPfB

関連する問題