Skip to main content
 首页 » 编程设计

Python *args 属性错误

2025年05月04日31zengkefu

谁能帮我弄清楚为什么第一个代码有效而第二个无效?:

工作代码

alias = [] 
alias.append(cx_Oracle.connect('%s/%s@%s' % (username, password, base))) 
solve(*alias, **binds) 
 
def solve(*alias, **binds): 
    cur = alias[0].cursor() 

代码无效

alias = [] 
alias.append(cx_Oracle.connect('%s/%s@%s' % (username, password, base))) 
solve(alias, binds) 
 
def solve(*alias, **binds): 
    cur = alias[0].cursor() 

错误

AttributeError: 'list' object has no attribute 'cursor'

*** 谢谢大家!这非常有帮助!

请您参考如下方法:

出现此问题是因为在第二种情况下,由于在将列表或字典作为参数传递给函数时没有解压缩列表或字典,因此它们被传递到 alias 中(在 solve 中函数 alias 的第一个元素是列表 alias ,alias 的第二个元素是字典 binds ) .

展示这个的例子-

>>> def a(*nargs, **kwargs): 
...     print('nargs : ',nargs) 
...     print('kwargs : ',kwargs) 
... 
>>> x = [1,2,3] 
>>> d = {'a':2,'b':4} 
>>> a(*x,**d) 
nargs :  (1, 2, 3) 
kwargs :  {'a': 2, 'b': 4} 
>>> a(x,d) 
nargs :  ([1, 2, 3], {'a': 2, 'b': 4}) 
kwargs :  {}