2016-08-04 25 views
0

Im пытается использовать mysqldb в сценарии python.Ошибка синтаксиса на db.close()

Вот часть кода из сценария

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 Джеттиг ошибка на db.close()

"db.close() ^ SyntaxError: недопустимый синтаксис"

Значит, любые предложения здесь?

+0

отступа? Он должен быть отступом на том же уровне, что и 'try:' – Owen

+5

вы забыли 'except' после' try'. –

+0

Это те настоящие кавычки, которые вы используете? Backticks ... – erip

ответ

2

Вы не можете использовать try без except.

Правильный способ игнорировать все ошибки заключается в следующем:

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

db.close() 
+0

Должно ли 'db.close' быть в' finally'? – erip

1

Ошибка при попытке: - он ищет, за исключением: до db.close.

0

Вы бы облегчили всем жизнь, если бы вы опубликовали полностью рабочие примеры. Я добавил фиктивный код проводке, чтобы сделать его запустить

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

Если я запускаю это я получаю:

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

Что показать вам не хватает, за исключением пункта в вашем примере.

Это не ошибка, о которой вы сообщаете, возможно, вы Синтаксическая ошибка является частью кода, который вы не указали в своем вопросе.

0

Игнорирование ошибок отступа в вашем коде, вам необходимо использовать либо предложение except, либо пункт finally, либо оба с вашим заявлением try.

С finally статьи вы можете убедиться, что соединение дб закрыт:

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

На практике это является целесообразным в том числе except статьи так, что исключение может быть зарегистрировано:

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