在创建python的tuple时,众所周知直接使用小括号即可,比如:
a = (1,2,3)
a
(1, 2, 3)
但是,如果tuple中只有一个元素呢?比如:
b = (1)
b
1
从上面的运行结果看,显然输出的b不是一个tuple,只是一个整数1。原因在于,小括号在这里被解释为算数运算表达式中小括号:用来表示运算等级。为了正确创建tuple,可以有两种方式:
b = (1,)
b
(1,)
b = tuple([1])
b
(1,)
如果不小心忘记了这条规则,python有时候会报出莫名其妙的错误信息,比如在使用psycopg2连接数据库时,有如下的sql:
sql = "select id from tab where code=%s"
在具体执行时如果这样写:
cur.execute(sql, (code))
其中的code是一个整数类型的代码编号,则会报错:
TypeError: not all arguments converted during string formatting
是不是有点莫名其妙?其实,只要把上面的(code)修改为(code,)或者tuple([code])就可以了。也就是说,execute要求第二个参数是tuple类型的,如果只是给出整数或者字符串,就会报告上面的错误信息。