13
str = r'c:\path\to\folder\'   # my comment
  • IDE: エクリプス
  • Python2.6

文字列の最後の文字がバックスラッシュの場合、最後の一重引用符がエスケープされ、コメントが文字列の一部として扱われるようです。しかし、生の文字列はすべてのエスケープ文字を無視するはずですよね? 何が間違っている可能性がありますか?ありがとう。

4

2 に答える 2

35

生の文字列リテラルは、直後の文字がリテラルを区切る引用文字である場合を除き、バックスラッシュをエスケープ シーケンスの開始として扱いません。この場合、バックスラッシュそれをエスケープします。

設計の動機は、生の文字列リテラルが実際には正規表現パターンを入力する便宜のためにのみ存在するということです。つまり、そのようなリテラルには他の設計目標は存在しません。また、RE パターンはバックスラッシュで終わる必要はありませんが、すべての種類の引用文字を含める必要がある場合あります。

多くの人が生の文字列リテラルを使用して、慣れ親しんだ方法で (バックスラッシュを使用して) Windows パスを入力できるようにしています。通常、最も簡単な解決策はスラッシュを使用することです。これは、Microsoft の C ランタイムとすべてのバージョンの Python が完全に同等のパスとしてサポートしています。

s = 'c:/path/to/folder/'

(補足:などの組み込みの名前を独自の識別子で隠してはなりませstrん。これは恐ろしい慣習であり、何のメリットもありません。その恐ろしい慣習を避ける習慣を身につけない限り、いつか厄介な名前が付いていることに気付くでしょう。コードの一部が組み込み名を踏みにじり、別の部分が組み込み名を実際の意味で使用する必要がある場合)。

于 2010-08-19T00:29:57.090 に答える
9

これはPythonの不一致ですが、ドキュメントに記載されています。最後から 2 番目の段落に移動します。

http://docs.python.org/reference/lexical_analysis.html#string-literals

r"\" は有効な文字列リテラルではありません (生の文字列であっても、奇数のバックスラッシュで終わることはできません)

于 2010-08-19T00:40:43.107 に答える