methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

日本語のdocstringはunicode literalで書こう

# coding: utf-8

def foo():
    """ほにゃらら"""

一般的にdocstringと言われていて標準的に使われるドキュメント形式なんだけど、上記のように通常の文字列として書いた場合は (Python 2.xでは) byte string になり、utf-8エンコードされているという情報が抜けてしまう。
当然のように、非ASCIIなbyte stringは慎重に扱わないと、すぐにUnicodeErrorになる。
from __future__ import unicode_literals をするか、 u"""ほにゃらら""" と書くべき。

例えば、Trac-ja が設定項目のdocstringをbyte stringで書いていて、iniadminというプラグインをインストールすると、docstringを表示しようとしてUnicodeDecodeErrorになる。Trac-jaを使うときは defaultencoding を utf-8 にするというバッドノウハウが横行しているが、これは止めたい。