题
我是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
理解前面的例子需要两个位:
- 当赋值的左侧是递归的名称序列时,右侧的值必须是具有相同长度的序列,并且RHS值的每个项目都分配给LHS中的相应名称
- python中的单项元组写成
(foo,)
。在大多数情况下,可以省略括号。特别是,它们可以在赋值运算符旁边省略。
醇>
其他提示
http://www.python.org/doc /2.5.2/tut/node7.html
查找<!> quot; sequence unpacking <!> quot;在第5.3节中。
逗号用于解包元组,即它提取元组的单个项目,并将其绑定到error
。如果没有逗号,您将绑定元组本身,而不是其内容。
不隶属于 StackOverflow