2017-02-10 2 views
-3

Mein Kwarg table in **kwarg wird nicht erkannt, wenn ich es aufrufen.** Kwargs nicht erkennen Schlüssel 'Tabelle' - 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') 

Ich erhalte eine Fehlermeldung wie:

Name 'table' ist nicht definiert

FULL TRACEBACK über aufgerufen:

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 

Was mache ich hier falsch?

+1

verwenden. Wenn dieses winzige, kleine Snippet einer Fehlermeldung von 'kwargs ['table' kommt ] ', dann kann ich deinen Fehler nicht reproduzieren. Mehr Details bitte. –

+0

Ich stimme @JackManey zu: Veröffentlichen Sie den gesamten Stack-Trace. – TemporalWolf

+0

Veröffentlichen Sie die tatsächliche, genaue Fehlermeldung, nicht nur etwas vage gefällt es. – user2357112

Antwort

0

hinzugefügt I Linie Fortsetzungen dieses fit horizontal zu machen ...

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'

die table in fett self.table

sollten Sie blind alle Ausnahmen mit Ihnen tryexcept Exception Block, fangen die wahrscheinlich die versteckte echtes Problem von dir. Es ist besser herauszufinden, welche Art von Ausnahme Sie abfangen möchten, und diese nur herauszufiltern. Wenn ich zum Beispiel ein Taschenrechnerprogramm haben wollte, das nicht abstürzte, wenn ein Benutzer versuchte, durch Null zu teilen, würde ich try: ... except ZeroDivisionError as e: ...

+1

Und deshalb sollte man niemals zu breite "except Exception" -Klauseln verwenden.Anstatt das erwartete zu behandeln, verbirgt es das Unerwartete. – JulienD

+1

Was ist mit 'where_field'? – vaultah

+1

@Aaron Anstatt es horizontal anzupassen, können Sie 'Database.query_stmt_list' in eine Variable einfügen. – JulienD