**kwargs无法识别钥匙';表';-python 3.5
调用**kwargs无法识别钥匙';表';-python 3.5,python,python-3.x,python-3.5,keyword-argument,Python,Python 3.x,Python 3.5,Keyword Argument,调用**kwarg中的kwarg表时,该表未被识别 class Database(): def set_db_setting(self, host, username, passwd, database): try: self.host = host self.username = username self.passwd = passwd self.database = da
**kwarg
中的kwarg表时,该表未被识别
class Database():
def set_db_setting(self, host, username, passwd, database):
try:
self.host = host
self.username = username
self.passwd = passwd
self.database = database
self.db = pymysql.connect(host=host, user=username, passwd=passwd, db=database)
print('connected to: {}'.format(database))
return self.db
except:
print('\nerror connecting to database\n')
def db_select(self, *selected_fields, **kwargs):
self.selected_fields = selected_fields = list(selected_fields)
self.table = (kwargs['table']
if 'table' in kwargs
else selected_fields.pop())
try:
with self.db.cursor() as cursor:
sql_tld_id_query = Database.query_stmt_list[0]+ ', '.join(selected_fields) + Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + where_field + '=' + 'www.website.com'
print("sql_tld_id_query is {}".format(sql_tld_id_query))
except Exception as gatherid_err:
print("exception was {}".format(gatherid_err))
self.db.rollback()
I'm invoking it like:
dbclass = Database()
dbclass.set_db_setting('localhost', 'root', 'password', 'garbagedb')
dbclass.db_select('id', 'name', table='tld', where_field='name')
我得到一个错误,比如:
未定义名称“table”
完全回溯
通过以下方式调用:
import traceback
traceback.print_stack()
`
文件“dbcrud.py”,第56行,在
dbclass.db_选择('id','name',table='tld',其中_field='name')
文件“dbcrud.py”,第31行,在db_select中
traceback.print_stack()
self.selected_字段为['id','name']
未定义异常名称“表”
我在这里做错了什么?我添加了线条延续以使其水平适合
sql_tld_id_query = Database.query_stmt_list[0]+ ', '.join(selected_fields) + \
Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + \
where_field + '=' + 'www.website.com'
sql\u tld\u id\u query=Database.query\u stmt\u list[0]+',join(所选字段)+\
数据库.查询列表[4]+表+数据库.查询列表[5]+\
其中_field+'='+'www.website.com'
粗体的表格应为self.table
你盲目地用try
捕获所有异常,异常块除外,它可能对你隐藏了真正的问题。最好找出您想要捕获的特定类型的异常,然后只过滤掉这些异常。例如,如果我想让一个计算器程序在用户试图除以零时不会崩溃,我会使用try:。。。除了e:…
这样的错误,如果错误消息的微小片段来自kwargs['table']
,那么我无法重现您的错误。请提供更多详细信息。我同意@JackManey:Post整个堆栈跟踪。“name'table'未定义”意味着table
未将其作为变量名找到,因此错误不能来自kwargs['table']
(这将是一个键错误)。查看代码中使用名为“table”的变量的位置。为什么要使用traceback.print\u stack
?它在这里是无用的,并且不会显示错误消息。@Jshee如果您不知道如何复制和粘贴文本或堆栈跟踪是什么,那么我不确定我们是否可以帮助您…这就是为什么永远不要使用太宽泛的“Exception”子句的原因。它不是处理预期的,而是隐藏意外的。关于where\u字段
,怎么样?@Aaron不是使其水平适合,而是将数据库。在变量中查询\u stmt\u列表
。@Jshee vultah关于where\u字段
,可能是正确的,我不知道它在哪里被定义或设置为你的类的属性…@Aaron,这需要另一个自我。
-再次感谢
sql_tld_id_query = Database.query_stmt_list[0]+ ', '.join(selected_fields) + \
Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + \
where_field + '=' + 'www.website.com'