Question

Je suis nouveau sur Python et je travaille sur l'écriture de code de base de données à l'aide du module cx_Oracle . Dans la documentation sur cx_Oracle , ils ont un exemple de code comme celui-ci:

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

Ma question concerne les "erreurs". l'objet est créé. Qu'est-ce que le " , = " faire? J'ai essayé de chercher dans la documentation Python, et les moteurs de recherche ne fonctionnent pas très bien lorsque vous recherchez des opérateurs. : -)

Je sais que exc.args est un tuple singleton, mais je ne comprends tout simplement pas le ", = ". syntaxe. Si je supprime la virgule, le message d'erreur suivant s'affiche: " AttributeError: l'objet" tuple "n'a pas d'attribut" code "".

Quelqu'un peut-il m'indiquer où cela est documenté? Merci!

EDIT:

Ceci fonctionne sans avoir à décompresser le tuple:

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
Était-ce utile?

La solution

error, = exc.args

Il s’agit du décompression de la séquence .

Une façon plus lisible d'écrire la même chose, et le style que je privilégie personnellement, est la suivante:

[error] = exc.args

Il faut deux bits pour comprendre l'exemple précédent:

  1. Lorsque le côté gauche d'une assignation est une séquence récursive de noms, la valeur du côté droit doit être une séquence de même longueur et chaque élément de la valeur RHS est attribué au nom correspondant dans le LHS. .
  2. Un tuple à un élément en python est écrit (foo,) . Dans la plupart des contextes, la parenthèse peut être omise. En particulier, ils peuvent être omis à côté de l'opérateur d'affectation.

Autres conseils

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

Recherchez "séquence de décompression". dans la section 5.3.

La virgule sert à décompresser le tuple, c’est-à-dire qu’elle extrait le seul élément du tuple et le lie à erreur . Sans la virgule, vous lieriez le tuple lui-même plutôt que son contenu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top