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
War es hilfreich?

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:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top