More Related Content
Similar to String representation in py3k (20)
String representation in py3k
- 4. そこでPython3では!
非ASCII文字でも、エスケープしない!
>>> "はろー"
'はろー'
>>> open("はろー")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or
directory: 'はろー’
空白文字・印刷不能文字は従来通りエス
ケープ
>>> "は¥tろ¥tー"
'は¥tろ¥tー'
- 5. でも、楽あれば苦あり
UnicodeEncodeErrorが邪魔くさい!
>>> "¥u0550" # ARMENIAN CAPITAL LETTER REH
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode character
'¥u0550' in position 1:
illegal multibyte sequence
環境によって、出力時にエラーが発生し
てしまう。デバッグには不便!
例外発生時、エラーメッセージに変換不
能文字があると、本来の例外が消えてし
まう
- 7. "backslashreplace"ハンドラを使う
変換できない文字は、例外を出さずに
"¥uXXXX" に変換して出力する
>>> "Hello, はろー".encode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position
7-9: ordinal not in range(128)
"Hello, はろー".encode("ascii",
"backslashreplace")
b'Hello, ¥u306f¥u308d¥u30fc'
- 8. 標準出力・エラー出力の使い方
sys.stderrのerrorsハンドラは
'backslashreplace'
>>> print(["¥u0550"], file=sys.stderr)
['¥u0550']
でも、sys.stdoutは’strict’
>>> print(["¥u0550"], file=sys.stdout)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec
can't encode character '¥u0550' in
position 2:
illegal multibyte sequence