質問
私は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ビットが必要です:
- 割り当ての左側が名前の再帰シーケンスである場合、右側の値は同じ長さのシーケンスである必要があり、RHS値の各項目はLHSの対応する名前に割り当てられます。
- Pythonの1項目タプルは、
(foo、)
で記述されます。ほとんどの場合、括弧は省略できます。特に、代入演算子の隣では省略できます。
他のヒント
http://www.python.org/doc /2.5.2/tut/node7.html
「シーケンスのアンパック」を探しますセクション5.3で。
コンマは、タプルをアンパックするのに役立ちます。つまり、タプルの単一のアイテムを抽出し、それを error
にバインドします。コンマがなければ、コンテンツではなくタプル自体をバインドします。
所属していません StackOverflow