2017-02-10 8 views
-3

Мой kwarg table в **kwarg не узнает, когда я его вызываю.** kwargs не распознает ключ «таблица» - python 3.5

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

Я получаю сообщение об ошибке, как:

имя 'таблицы' не определен

ПОЛНЫЙ след вызовов TRACEBACK вызывается через:

import traceback 
traceback.print_stack() 

`

File "dbcrud.py", line 56, in <module> 
    dbclass.db_select('id', 'name', table='tld', where_field='name') 
    File "dbcrud.py", line 31, in db_select 
    traceback.print_stack() 
self.selected_fields is ['id', 'name'] 
exception was name 'table' is not defined 

Что я здесь делаю неправильно?

+1

Если этот крошечный крошечный фрагмент сообщения об ошибке исходит из 'kwargs ['table' ] ', то я не могу воспроизвести вашу ошибку. Подробнее, пожалуйста. –

+0

Я согласен с @JackManey: Опубликуйте всю трассировку стека. – TemporalWolf

+0

Опубликуйте фактическое, точное сообщение об ошибке, а не только что-то смутное. – user2357112

ответ

0

Я добавил продолжения линии, чтобы сделать эту посадку по горизонтали ...

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'

table шрифт должен быть self.table

вы слепо перехватывать все исключения с вами tryexcept Exception блоком, который, вероятно, скрывались реальная проблема от вас. Лучше узнать, какой конкретный вид исключения вы хотите поймать, и только отфильтровать его. Например, если бы я хотел иметь программу калькулятора, которая не сработала, когда пользователь попытался делить на ноль, я бы использовал try: ... except ZeroDivisionError as e: ...

+1

И поэтому никогда не следует использовать слишком широкие предложения «кроме исключения».Вместо того, чтобы обрабатывать ожидаемое, он скрывает неожиданное. – JulienD

+1

Как насчет 'where_field'? – vaultah

+1

@Aaron Вместо того, чтобы делать это горизонтально, вы можете поместить 'Database.query_stmt_list' в переменную. – JulienD

 Смежные вопросы

  • Нет связанных вопросов^_^