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
¿Fue útil?

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:

  1. 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 .
  2. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top