2016-08-04 51 views
0

我试图在python脚本中使用mysqldb。db.close上的Synax错误()

这里是代码的从脚本

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

林gettig上db.close一个错误()

一部分 “db.close() ^ 语法错误:无效的语法”

那么这里有什么建议?

+0

缩进?它应该缩进到'try:'' – Owen

+5

'你在'try'之后忘记'except'。 –

+0

这些是你使用的真实报价吗?反引号... – erip

回答

2

如果没有except,则不能使用try

忽略所有的错误正确的方法是这样的:

​​
+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