あなたが掘削を開始するといくつかの問題は、ここにあるかどうか:。
項目が問題の "と呼ばれていますelement_index "は整数であると定義される。問題1:ユーザーが「整数」から言語リファレンスマニュアルへのリンクをたどらない限り、-1は整数ではなく式であると認識されます。ところで、「文書化されているように働く」と言いたくなる人は、最初に賛否両論7を見るべきです:-)
好ましい解決法: "element_index"が整数の前にオプションの ' - 'を持つことができるように定義を変更します。
これは整数です。それほど高速ではありません...後で、「 '[index]'式の式は__getitem__()
を使ってインデックスルックアップを実行します」というメッセージが表示される問題3: '[element_index]'(インデックスが定義されていません)としてください。
問題4:誰もが頭の上を知っているわけではありません。__getitem__()
より明確なドキュメントが必要です。
ここでは整数と同様にdictを使用できますか?はい、問題が2つあります。
element_indexは整数ですか?はい、それは辞書で動作します。我々はまた、非整数の文字列を使用することができるようです
>>> "{0[2]}".format({2: 'int2'})
'int2'
が、これは、より明示的なドキュメントを必要とする(問題5):
>>> "{0[foo]}".format({'foo': 'bar'})
'bar'
しかし、我々はできません
>>> "{0[2]}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 2
>>> "{0['2']}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'2'"
問題7::「2」(問題点6)のようなキーで辞書を使用する「整数」は本当に「decimalinteger」であることを文書化する必要があることを...ただし0x22と0b11にはSTRとして扱われ、及び010( "octalinteger")が10ではなく8として扱われる:
>>> "{0[010]}".format('abcdef')
'a'
更新: ""」
ルール
:PEP 3101本当の物語アイテムキーの解析は非常に簡単です。数字で始まる場合は数字として扱い、それ以外の場合は文字列として扱います。
キーは引用符で区切られていないため、指定できません書式文字列内の任意の辞書キー(例えば、文字列「10」または「: - 」)。
""
は、フォーマット関数定義の監視のように聞こえます – barkmadley
Pythonのバグベースに関連するバグ - http://bugs.python.org/issue7951。要するに、この問題は、これを実装することの副作用と、それが悪いコードにつながる可能性があるという事実のために、ドキュメントのバグとして扱われています。 – Sam