質問: Pythonで文字列リテラル'...', "..."の前にrまたはRをつけると、 エスケープシーケンスを展開せずそのままの値が文字列となる。 ということですが、 例えば、 x="t67890-^\" は、EOL while scanning string literalというエラーになり、 \を\\にして x="t67890-^\\" とすればエラーにはならなくなります。 これを、\を使わずにr" "を使えば、 \は単なる文字列として解釈されるのでエラーにならないように思うのですが、 x=r"t67890-^\" としてみても、 EOL while scanning string literalというエラーになります。 なぜでしょうか。 \を使わずにエラーにならないようにするには、 どのように記述すればよいでしょうか。 (" "の中が変化するため、" "全体でエスケープを無効化したいです) (Windows10,Python 3.7.3)
回答: ~~諦めて`r"t67890-^\\"`と書くしか無いです。~~ > > ### なぜ raw 文字列 (r-strings) はバックスラッシュで終わってはいけないのですか? > > > 正確には、奇数個のバックスラッシュで終わってはいけません。終わりの対になっていないバックスラッシュは、閉じ引用文字をエスケープし、終っていない文字列を残してしまいます。 > > > ...中略 > > > > ``` > dir = r"\this\is\my\dos\dir" "\\" > dir = r"\this\is\my\dos\dir\ "[:-1] > dir = "\\this\\is\\my\\dos\\dir\\" > ``` > > **引用元:** デザインと歴史 FAQ — Python 3.7.4 ドキュメント