11585


pythonでボタンを押すと指定したファイルを開く簡単なランチャーを作ろうとしたのですが、

[code]

    f = open("C:\Users\hoge\Documents\python programs", "r", encoding="utf-8")
    
[/code]

の部分で

[code]

    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape
    
[/code]

というエラーが出てしまいます。どうすれば解決できるでしょうか。


CC BY-SA 4.0
2015-06-21T15:45:33.003
11582
2018-10-04T17:00:44.880
2018-10-04T17:00:44.880
3054
9597
question
python
open関数を使うとエラー (unicode error) が出てしまいます


文字列リテラル中の`\`はエスケープに使われます。  
例えば `\n` が改行、`\t` がタブ、`\\\` が `\` 自身などです。  
ですので `"C:\Users ……` という文字列の `\U` 以下がエスケープシーケンスと見なされています。  
`\Uxxxxxxxx`
は文字コードを指定するエスケープシーケンスです。(<http://docs.python.jp/3/reference/lexical_analysis.html?#string-
and-bytes-literals>)

解決方法は、

  1. raw文字を使えばエスケープは解釈され無いので r を付けて、`r"C:\Users ……` と書く。
  2. `\`自身を表すため `\\\` とし `"C:\\\Users ……` と書く。
  3. Unix系のようにディレクトリの区切りに `/` を使う。(Windows であっても、Python がよろしくやってくれると思います)

あたりでしょうか。


CC BY-SA 3.0
2015-06-21T17:03:01.947
11585
2015-06-21T17:03:01.947
3054
11582
answer


"\Uxxxx"はエスケープシーケンスとして処理されます。  
プレフィックスに'r'を付ける事で解決します。

[code]

    r"C:\Users\hoge\Documents\python programs"
    
[/code]

'r'を使うことで、raw文字列として扱われ、"\U"がエスケープシーケンスとして処理されなくなります。

参考サイト  
<http://docs.python.jp/3/reference/lexical_analysis.html#string-and-bytes-
literals>  
<https://hydrocul.github.io/wiki/programming_languages_diff/string/escape.html>  
<http://www.pythonweb.jp/tutorial/string/index4.html>


CC BY-SA 3.0
2015-06-21T17:19:43.407
11586
2015-06-21T17:19:43.407
10150
11582
answer