**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'