Newbie Python Frage zum Tupeln
Frage
Ich bin neu in Python, und ich arbeite einig Datenbank-Code mit dem cx_Oracle
Modul auf dem Schreiben. In der cx_Oracle Dokumentation sie ein Codebeispiel wie folgt aussehen:
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
Meine Frage hat mit dem das „Fehler“ Objekt zu tun, wird erstellt. Was bedeutet die „, =
“ tun? Ich habe versucht, die Suche Python-Dokumentation, und Suchmaschinen sehr gut funktionieren nicht, wenn Sie für die Betreiber gesucht werden soll. : -)
Ich weiß, dass die exc.args ein Singleton Tupel ist, aber ich verstehe einfach nicht die „, =
“ Syntax. Wenn ich das Komma entfernen, erhalte ich die Fehlermeldung „AttributeError: 'tuple' object has no attribute 'code'
“.
Kann jemand mir zeigen, wo dies dokumentiert ist? Dank!
EDIT:
Das funktioniert, ohne dass das Tupel auszupacken:
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
Lösung
error, = exc.args
Dies ist ein Fall von Sequenz Auspacken .
Eine lesbare Weise das gleiche, und der Stil, den ich persönlich bevorzugen, zu schreiben:
[error] = exc.args
Es gibt zwei Bits das vorherige Beispiel zu verstehen, benötigt:
- Wenn die linke Seite einer Zuweisung eine rekursiven Folge von Namen ist, muss der Wert der rechten Seite eine Sequenz mit der gleichen Länge sein, und jedes Element des RHS-Wertes wird auf den entsprechenden Namen in der LHS zugewiesen .
- Ein Ein-Punkt Tupel in Python geschrieben
(foo,)
. In den meisten Kontexten kann die Klammer weggelassen werden. Insbesondere können sie neben dem Zuweisungsoperator weggelassen werden.
Andere Tipps
http://www.python.org/doc /2.5.2/tut/node7.html
Geben Sie für "-Sequenz Auspacken" in Abschnitt 5.3.
Das Komma dient das Tupel auszupacken, das heißt, es extrahiert die einzelne Element des Tupels und bindet es an error
. Ohne das Komma, würde binden Sie das Tupel selbst, anstatt ihren Inhalt.