关于元组的新手Python问题

m0j*_*0j0 5 python cx-oracle tuples

我是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
Run Code Online (Sandbox Code Playgroud)

我的问题与创建"错误"对象的位置有关." , ="是做什么的?我尝试搜索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
Run Code Online (Sandbox Code Playgroud)

dda*_*daa 10

error, = exc.args
Run Code Online (Sandbox Code Playgroud)

这是序列解包的情况.

写一个更可读的方式,以及我个人喜欢的风格是:

[error] = exc.args
Run Code Online (Sandbox Code Playgroud)

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

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