2008-11-19 20 views
5

Soy nuevo en Python, y estoy trabajando en la escritura de código de base de datos usando el módulo cx_Oracle. En el cx_Oracle documentation tienen un ejemplo de código siguiente manera:Newbie Python Pregunta sobre tuplas

Mi pregunta tiene que ver con el lugar donde se crea el objeto "error". ¿Qué hace el ", ="? Intenté buscar la documentación de Python, y los motores de búsqueda no funcionan muy bien cuando buscas operadores. :-)

Sé que el exc.args es una tupla singleton, pero simplemente no entiendo la sintaxis ", =". Si elimino la coma, aparece el mensaje de error "AttributeError: 'tuple' object has no attribute 'code'".

¿Alguien me puede indicar dónde está esto documentado? ¡Gracias!

EDIT:

Esto funciona sin tener que descomprimir la tupla:

import sys 
import cx_Oracle 

connection = cx_Oracle.Connection("user/[email protected]") 
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 

Respuesta

9
error, = exc.args 

Este es un caso de sequence unpacking.

Una forma más fácil de leer que escribir el mismo, y el estilo que personalmente a favor, es decir:

[error] = exc.args 

Hay dos bits necesarios para entender el ejemplo anterior:

  1. Cuando la mano izquierda el lado 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.
  2. Una tupla de un elemento en python se escribe (foo,). En la mayoría de los contextos, el paréntesis puede ser omitido. En particular, pueden omitirse junto al operador de asignación.
5

http://www.python.org/doc/2.5.2/tut/node7.html

buscar "secuencia de desembalaje" en la sección 5.3.

+0

Gracias! Eso tiene sentido ahora! – m0j0

+0

Me sirve para publicar una respuesta larga con explicaciones y todo. Para cuando terminé de escribir el mío, este había sido aceptado :( – ddaa

+0

Bueno, voté por el suyo, ddaa, y ahora está aceptado, así que no me siento tan mal. –

4

La coma sirve para descomprimir la tupla, es decir, extrae el elemento individual de la tupla y lo vincula al error. Sin la coma, vincularías la tupla misma, en lugar de su contenido.