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() を使った方がいい。