2008-11-19 11 views
5

Ich bin neu in Python, und ich arbeite an das Schreiben einiger Datenbank-Code mit dem cx_Oracle Modul. Im cx_Oracle documentation haben sie ein Codebeispiel wie folgt aus:Newbie Python Frage über Tupel

Meine Frage hat mit dem der „Fehler“ zu tun Objekt erstellt wird. Was macht die ", ="? Ich habe versucht, Python-Dokumentation zu durchsuchen, und Suchmaschinen funktionieren nicht sehr gut, wenn Sie nach Operatoren suchen. :-)

Ich weiß, dass die exc.args ein Singleton-Tupel ist, aber ich verstehe einfach nicht die ", =" -Syntax. Wenn ich das Komma entferne, erhalte ich die Fehlermeldung "AttributeError: 'tuple' object has no attribute 'code'".

Kann mir jemand zeigen, wo das dokumentiert ist? Vielen Dank!

EDIT:

Dies funktioniert ohne das Tupel auszupacken mit:

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 

Antwort

9

Dies ist ein Fall von sequence unpacking.

Eine lesbare Weise das gleiches zu schreiben, und der Stil, den ich persönlich bevorzugen, ist:

[error] = exc.args 

Es gibt zwei Bits das vorherige Beispiel zu verstehen, benötigt:

  1. Wenn die linke Hand Seite einer Zuweisung ist eine rekursive Sequenz von Namen, der Wert der rechten Seite muss eine Sequenz mit der gleichen Länge sein, und jeder Eintrag des RHS-Werts wird dem entsprechenden Namen in der LHS zugewiesen.
  2. Ein One-Item-Tupel in Python ist (foo,) geschrieben. In den meisten Kontexten kann die Klammer weggelassen werden. Insbesondere können sie neben dem Zuweisungsoperator weggelassen werden.
5

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

Geben Sie für "-Sequenz Auspacken" in Abschnitt 5.3.

+0

Danke! Das macht jetzt Sinn! – m0j0

+0

Bedient mich Recht, eine lange Antwort mit Erklärungen und allem zu posten. Als ich mit dem Schreiben von mir fertig war, wurde dieser angenommen :( – ddaa

+0

Nun, ich habe deine gewählt, ddaa, und es ist jetzt akzeptiert, also fühle dich nicht so schlecht. –

4

Das Komma dient dazu, das Tupel zu entpacken, d. H. Es extrahiert das einzelne Element des Tupels und bindet es an error. Ohne das Komma würden Sie das Tupel selbst und nicht seinen Inhalt binden.