我是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' <!>”;句法。如果我删除逗号,则会收到错误消息,<!> quot; <=> <!> quot;。

有人能指出我记录的地方吗?谢谢!

修改

无需解压元组即可正常工作:

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

理解前面的例子需要两个位:

  1. 当赋值的左侧是递归的名称序列时,右侧的值必须是具有相同长度的序列,并且RHS值的每个项目都分配给LHS中的相应名称
  2. python中的单项元组写成(foo,)。在大多数情况下,可以省略括号。特别是,它们可以在赋值运算符旁边省略。

其他提示

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

查找<!> quot; sequence unpacking <!> quot;在第5.3节中。

逗号用于解包元组,即它提取元组的单个项目,并将其绑定到error。如果没有逗号,您将绑定元组本身,而不是其内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top