Newbie Python Domanda sulle tuple
Domanda
Sono nuovo di Python e sto lavorando alla scrittura di un codice di database utilizzando il modulo cx_Oracle
. Nella cx_Oracle documentazione hanno un esempio di codice come questo:
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
La mia domanda ha a che fare con dove " errore " l'oggetto è stato creato. Cosa significa " , =
" fare? Ho provato a cercare la documentazione di Python e i motori di ricerca non funzionano molto bene quando cerchi operatori. : -)
So che exc.args è una tupla singleton, ma non capisco il " , =
" sintassi. Se rimuovo la virgola, ricevo il messaggio di errore, " AttributeError: l'oggetto 'tuple' non ha attributo 'code'
" ;.
Qualcuno può indicarmi dove è documentato? Grazie!
Modifica
Funziona senza dover decomprimere 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
Soluzione
error, = exc.args
Questo è un caso di disimballaggio della sequenza .
Un modo più leggibile per scrivere lo stesso, e lo stile che preferisco personalmente, è:
[error] = exc.args
Sono necessari due bit per comprendere l'esempio precedente:
- Quando il lato sinistro di un'assegnazione è una sequenza ricorsiva di nomi, il valore del lato destro deve essere una sequenza con la stessa lunghezza e ogni elemento del valore RHS è assegnato al nome corrispondente nell'LHS .
- Una tupla di un oggetto in python è scritta
(foo,)
. Nella maggior parte dei contesti, la parentesi può essere omessa. In particolare, possono essere omessi accanto all'operatore di assegnazione.
Altri suggerimenti
http://www.python.org/doc /2.5.2/tut/node7.html
Cerca " sequenza disimballaggio " nella sezione 5.3.
La virgola serve per decomprimere la tupla, ovvero estrae il singolo elemento della tupla e lo lega a errore
. Senza la virgola, legheresti la tupla stessa, piuttosto che il suo contenuto.