2016-08-04 18 views
0

Ich versuche, mysqldb in einem Python-Skript zu verwenden.Synax Fehler bei db.close()

Hier ist ein Teil des Codes aus dem Skript

cursor = db.cursor() 

    sql = """INSERT INTO location(`name`, `lat`, `long`, `guid`, `image`, `date`)VALUES(%(name)s, %(lat)s, %(long)s, %(guid)s, %(image)s, %(date)s)""" 

    try: 
     cursor.execute(sql) 
     db.commit() 

db.close() 

Im Gettig ein Fehler auf dem db.close()

"db.close() ^ Syntax: ungültige Syntax"

Also irgendwelche Vorschläge hier?

+0

Einrückungen? Es sollte auf das gleiche Level eingerückt werden wie 'try:' – Owen

+5

Sie haben 'except' nach' try' vergessen. –

+0

Sind das die echten Zitate, die du benutzt? Backticks ... – erip

Antwort

2

Sie können try ohne except nicht verwenden.

Der richtige Weg, um alle Fehler zu ignorieren, ist dies:

try: 
    cursor.execute(sql) 
    db.commit() 
except: 
    pass 

db.close() 
+0

Sollte die 'db.close' in einem' finally' sein? – erip

1

Der Fehler mit dem Versuch ist: - es ist für eine Suche mit Ausnahme von: vor dem db.close.

0

Sie würden alle leben leichter, wenn Sie voll funktionsfähige Beispiele veröffentlicht. Ich habe einige Dummy-Code zu Ihnen bekannt geben, um es

class fake: 
    def commit(self,):pass 
    def execute(self,sql):pass 
    def close(self,):pass 


db =fake() 
cursor=fake() 

if 1: 
    sql = """INSERT INTO location(`name`, `lat`, `long`, `guid`, `image`, `date`)VALUES(%(name)s, %(lat)s, %(long)s, %(guid)s, %(image)s, %(date)s)""" 

    try: 
     cursor.execute(sql) 
     db.commit() 

db.close() 

laufen zu lassen, wenn ich diese laufen erhalte ich:

$ python3 test.py 
    File "test.py", line 17 
    db.close() 
    ^
IndentationError: unexpected unindent 
$ 

, die zeigen Ihnen die except-Klausel in Ihrem Beispiel fehlen.

Dies ist nicht der Fehler, den Sie melden, vielleicht sind Sie Syntax Error in Teil des Codes, den Sie nicht in Ihrer Frage enthalten haben.

0

Wenn Sie die Einrückungsfehler in Ihrem Code ignorieren, müssen Sie entweder eine except-Klausel, eine finally-Klausel oder beides mit Ihrer try-Anweisung verwenden.

Mit einer finally Klausel können Sie sicherstellen, dass die DB-Verbindung geschlossen ist:

try: 
    cursor.execute(sql) 
    db.commit() 
finally: 
    db.close() 

In der Praxis ist es sinnvoll ist, die eine except Klausel so, dass die Ausnahme protokolliert werden können:

import traceback 

try: 
    cursor.execute(sql) 
    db.commit() 
except Exception as exc: 
    traceback.print_exc() # or whatever logging you require 
    raise     # optionally re-raise the exception 
finally: 
    db.close()    # _always_ executed