Newbie Python Pregunta sobre tuplas
Pregunta
Soy nuevo en Python y estoy trabajando en escribir un código de base de datos usando el módulo cx_Oracle
. En la documentación de cx_Oracle tienen un código de ejemplo como este:
import sys
import cx_Oracle
connection = cx_Oracle.Connection("user/pw@tns")
cursor = connection.cursor()
try:
cursor.execute("select 1 / 0 from dual")
except cx_Oracle.DatabaseError, exc:
error, = exc.args
print >> sys.stderr, "Oracle-Error-Code:", error.code
print >> sys.stderr, "Oracle-Error-Message:", error.message
Mi pregunta tiene que ver con dónde está el " error " Se crea el objeto. ¿Qué significa el " , =
" ¿hacer? Intenté buscar en la documentación de Python, y los motores de búsqueda no funcionan muy bien cuando estás buscando operadores. :-)
Sé que exc.args es una tupla singleton, pero no entiendo el " , =
" sintaxis. Si elimino la coma, aparece el mensaje de error, " AttributeError: el objeto 'tupla' no tiene el atributo 'code'
" ;.
¿Alguien puede señalarme dónde está documentado esto? Gracias!
EDIT:
Esto funciona sin tener que descomprimir la tupla:
import sys
import cx_Oracle
connection = cx_Oracle.Connection("user/pw@tns")
cursor = connection.cursor()
try:
cursor.execute("select 1 / 0 from dual")
except cx_Oracle.DatabaseError, exc:
print >> sys.stderr, "Oracle-Error-Code:", exc.args[0].code
print >> sys.stderr, "Oracle-Error-Message:", exc.args[0].message
Solución
error, = exc.args
Este es un caso de desempaque de secuencia .
Una forma más legible de escribir lo mismo, y el estilo que personalmente prefiero, es:
[error] = exc.args
Se requieren dos bits para comprender el ejemplo anterior:
- Cuando el lado izquierdo de una asignación es una secuencia recursiva de nombres, el valor del lado derecho debe ser una secuencia con la misma longitud, y cada elemento del valor RHS se asigna al nombre correspondiente en el LHS .
- Una tupla de un elemento en Python se escribe
(foo,)
. En la mayoría de los contextos, se puede omitir el paréntesis. En particular, pueden omitirse junto al operador de asignación.
Otros consejos
http://www.python.org/doc /2.5.2/tut/node7.html
Busque " desempaquetado de secuencia " en la sección 5.3.
La coma sirve para desempaquetar la tupla, es decir, extrae el único elemento de la tupla y lo vincula al error
. Sin la coma, vincularía la tupla misma, en lugar de su contenido.