我是Python的新手,我正在使用cx_Oracle
模块编写一些数据库代码。在cx_Oracle documentation中,他们有一个代码示例:
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
答案 0 :(得分:10)
error, = exc.args
这是sequence unpacking的案例。
更可读的方式来写这个,我个人喜欢的风格是:
[error] = exc.args
理解前面的例子需要两个位:
(foo,)
。在大多数情况下,可以省略括号。特别是,它们可以在赋值运算符旁边省略。答案 1 :(得分:5)
http://www.python.org/doc/2.5.2/tut/node7.html
在5.3节中查找“序列解包”。
答案 2 :(得分:4)
逗号用于解包元组,即它提取元组的单个项目,并将其绑定到error
。如果没有逗号,您将绑定元组本身,而不是其内容。