2016-06-22 24 views
4

元の辞書のキーで渡されたキーワードを検索し、新しい略語を返すことによって辞書を省略するメソッドのdoctestを作成します。次のように私のドキュメンテーション文字列が見えます:Python:doctestの正規文字列としてUnicode文字列を受け入れる

def abbreviate_dict(key_word, original_dict): 
    """ 
    >>> orig_dict = {apple_stems: 2, apple_cores: 5, apple_seeds: 3} 
    >>> abbreviate_dict('apple', orig_dict) 
    {'cores': 5, 'seeds': 3, 'stems': 2} 
    """ 
    etc. 
    return new_dict 

機能が動作しますが、私はpy.testのdoctestのを実行すると、それはユニコードとして文字列を返すよう、機能がテストに失敗しました。私は関数内で文字列をプログラム的にUnicodeに切り替えるわけではありませんが、Python 2.7がUnicodeで返ってくることを知っています。

Expected: 
    {'cores': 5, 'seeds': 3, 'stems': 2} 
Got: 
    {u'cores': 5, u'seeds': 3, u'stems': 2} 

ユニコードと通常の文字列出力が同じであることを確認するにはどうすればよいですか?

+0

"どのように私は私はUnicodeと通常の文字列の出力が同じで認めることのdoctestを得ることができますか?" - 悪い動き。彼らは全く同じではありません。バイトコードやUnicode文字列で作業しているかどうかは、常に意識しておくことが非常に重要です。 – user2357112

+0

一方、doctestでPython 2/3の互換性を達成するのは困難です。文字列型はPython 2と3で異なって表示されるためです。 – user2357112

+0

これらは同じではありませんが、機能の焦点は型間の解読ではありません代わりに辞書を操作して返します。正しい辞書が返されているかどうかを確認したいのですが、どのように関数の出力の合同性をチェックするためにテストを導くことができますか?役に立つ答えです。 – af3ld

答えて

5

フラグは、ALLOW_UNICODEフラグを(グローバルまたはテストごとに)設定できます。詳細はpytest docsを参照してください。

例:

[pytest] 
doctest_optionflags = ALLOW_UNICODE 

または

# content of example.rst 
>>> get_unicode_greeting() # doctest: +ALLOW_UNICODE 
'Hello' 
+0

「Doctestはこれをすることができず、不自由な人、それを使用しない」という行に沿って、関連する質問に対する答えが何故多くあるのか不明です。 :( – jwg

関連する問題