此代码段是我当前正在开发的电报机器人的一部分。我使用了PyTelegramBotAPI包,并使用了@ bot.callback_query_handler()处理来自用户的回调查询。然后,我创建了一个函数,该函数使用以下代码为该特定用户打印出数据库中的最后一个条目:
calloc(n, sizeof(int))
此错误返回并指出ValueError:参数类型不受支持
def splitbill(user):
row = c.execute('SELECT * FROM database WHERE user = (?) ORDER BY datetime DESC LIMIT 1', user).fetchall()
print(row[0])
我用(user,)而不是(user)搜索并找到了此解决方案。但是我不知道为什么它起作用。有人可以启发我吗?谢谢!
答案 0 :(得分:2)
sudo
起作用的原因是因为(user,)
方法期望一个元组,并且当您在没有逗号的情况下传递execute
时,python会将其解释为(user)
。
您可以在python shell中很快验证这一点:
user
答案 1 :(得分:0)
(user)被解释为一个表达式,而(user,)始终是一个元组。
答案 2 :(得分:0)
在Python世界中,单元素tuples
以,
结尾。例如:
>>> p=(1)
>>> print(type(p))
<type 'int'> #--note that this is taken as an int, irrespective of the braces.
>>> q=(1,)
>>> print(type(q))
<type 'tuple'>
函数c.excute
可能接受tuple
个占位符,这就是为什么您传入的(user)
参数不被视为元组的原因。不过好问题。