5

私は Python を初めて使用し、cx_Oracleモジュールを使用していくつかのデータベース コードを作成しています。cx_Oracleのドキュメントには、次のようなコード例があります。

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

私の質問は、「エラー」オブジェクトが作成される場所に関係しています。「, =」は何をしますか? Python のドキュメントを検索してみましたが、演算子を検索するときに検索エンジンがうまく機能しません。:-)

exc.args がシングルトン タプルであることはわかっていますが、" , =" 構文がわかりません。カンマを削除すると、エラー メッセージ " AttributeError: 'tuple' object has no attribute 'code'" が表示されます。

誰かがこれが文書化されている場所を教えてもらえますか? ありがとう!

編集:

これは、タプルをアンパックしなくても機能します。

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
4

3 に答える 3

10
error, = exc.args

これはシーケンス アンパックの場合です。

同じことをより読みやすく書く方法と、私が個人的に好むスタイルは次のとおりです。

[error] = exc.args

前の例を理解するには、次の 2 つのビットが必要です。

  1. 代入の左辺が名前の再帰シーケンスである場合、右辺の値は同じ長さのシーケンスでなければならず、RHS 値の各項目は LHS の対応する名前に割り当てられます。
  2. python で 1 項目のタプルが書かれて(foo,)います。ほとんどの場合、括弧は省略できます。特に、代入演算子の隣では省略できます。
于 2008-11-19T22:51:00.380 に答える
5

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

セクション 5.3 で「シーケンス アンパッキング」を探します。

于 2008-11-19T22:40:42.303 に答える
4

コンマは、タプルをアンパックする役割を果たします。つまり、タプルの単一項目を抽出し、それを にバインドしerrorます。コンマがないと、内容ではなく、タプル自体をバインドします。

于 2008-11-19T22:49:00.120 に答える