unicodeのraw文字列は \ をエスケープしない場合がある

Vistaに変えたので、ハードコードされたパスを置き換えていたところ、以下のようなコードでエラーになることに気付いた。

path = ur'C:\Users\foo\Documents'

例外はこんな感じ。文法エラーがあると言っている。

SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX

ドキュメントを見ると、確かに ur を付けた場合 \u\Uエスケープされないと書いてあるな。

r" および "R" 接頭文字を "u" や "U" と合わせて使った場合、\uXXXXおよび \UXXXXXXXX エスケープシーケンスは処理されます

http://www.python.jp/doc/release/ref/strings.html

えー、つまり ur を付けたら \U って書けないってこと? しょうがないので ur'C:\\Users\foo\Documents' と書くようにした*1。区切り文字は複数あっても構わないようなので。

ちなみに、Python3からは、全てエスケープされるようになるとのこと。

*1:普通は os.path.expandvars() を使った方がいい。