Hay algunos problemas aquí, una vez que comience la excavación:
el artículo en cuestión se llama " element_index "que se define como un entero.
Problema 1: a menos que los usuarios sigan el enlace de "entero" al manual de referencia del lenguaje, no sabrán que -1 se considera una expresión, no un número entero. Por cierto, cualquiera que tenga la tentación de decir "funciona como está documentado" debería ver primero el proplem 7 :-)
Solución preferida: cambie la definición para que "element_index" pueda tener un '-' opcional antes del entero.
Es un número entero, ¿no? No tan rápido ... más tarde los documentos dicen que "una expresión de la forma '[índice]' hace una búsqueda de índice usando __getitem__()
"
Problema 3: Debería decir '[element_index]' (el índice no está definido).
Problema 4: No todo el mundo sabe lo que hace __getitem__()
. Necesita documentos más claros.
Así que podemos usar un dict aquí, así como un número entero, ¿o sí? Sí, con un problema o dos:
¿element_index es un número entero? Sí, que trabaja con un diccionario:
>>> "{0[2]}".format({2: 'int2'})
'int2'
Parece que también podemos utilizar cadenas no enteros, pero para ello se necesita una documentación más explícita (Problema 5):
>>> "{0[foo]}".format({'foo': 'bar'})
'bar'
pero no podemos usar un diccionario con una llave como '2' (problema 6):
>>> "{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'"
problema 7: que "entero" en realidad se debe documentar para ser "decimalinteger" ...0x22 y 0b11 son tratados como str, y 010 (un "octalinteger") se trata como 10, no 8:
>>> "{0[010]}".format('abcdef')
'a'
Actualización:PEP 3101 cuenta la verdadera historia:
"""
Las reglas para analizar una clave de elemento son muy simples. Si comienza con un dígito, se trata como un número, de lo contrario se utiliza como una cadena.
Como las claves no están delimitadas por comillas, no es posible especificar teclas de diccionario arbitrarias (por ejemplo, las cadenas "10" o ": -]") dentro de una cadena de formato.
"" "
suena como un descuido en la definición de las funciones de formato – barkmadley
El error relevante en la base de datos de Python - http://bugs.python.org/issue7951. En resumen, el problema se está tratando como un error de documentación debido a los efectos secundarios de implementar esto y también al hecho de que puede conducir a un código incorrecto. – Sam