質問

私は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
役に立ちましたか?

解決

error, = exc.args

これは、シーケンスの解凍の場合です。

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

[error] = exc.args

前の例を理解するには2ビットが必要です:

  1. 割り当ての左側が名前の再帰シーケンスである場合、右側の値は同じ長さのシーケンスである必要があり、RHS値の各項目はLHSの対応する名前に割り当てられます。
  2. Pythonの1項目タプルは、(foo、)で記述されます。ほとんどの場合、括弧は省略できます。特に、代入演算子の隣では省略できます。

他のヒント

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

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

コンマは、タプルをアンパックするのに役立ちます。つまり、タプルの単一のアイテムを抽出し、それを error にバインドします。コンマがなければ、コンテンツではなくタプル自体をバインドします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top