python中通过Mysqldb查询引发的异常。它直接在mySQL上执行

2024-03-28 09:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图调用一个函数来执行查询:

def run(self,query):       
        try:
            self.cursor = self.conn.cursor ()
            self.cursor.execute(query)
        except MySQLdb.Error, e:
            logger.info( "Run function with query: %s Error %d: %s" % (query,e.args[0], e.args[1]))
        except:
            logger.info( "Errorin Run function with query %s" % (query))

这个函数对查询的mot起到了很好的作用。在

我试图运行一个查询:

^{pr2}$

此查询引发异常,输出为Errorin Run function with query %s" % (query) 回溯错误: 错误:我正在获取is UnicodeEncodeError:“latin-1”编解码器无法对位置120中的字符u“\u2013”进行编码:序号不在范围内(256)

当我在Mysql命令行上复制并运行时,它起作用了。有人能告诉我出什么问题了吗?在


Tags: 函数runselfinfodef错误withargs
1条回答
网友
1楼 · 发布于 2024-03-28 09:11:13

在该查询中有一些特殊字符,默认的语言环境是拉丁语-1(iso-8859-1)。当python试图打印出错误消息并包含查询时,它无法将unicode对象编码为字节(它必须这样做,因为您只能通过管道而不是代码点发送字节)。在

您可以尝试使用支持utf-8的终端来运行,确保您的语言环境是utf-8友好的,或者显式地指定如何对查询数据进行编码以进行输出。在

一个很好的快速更改是在该行使用%r,而不是{}。在

logger.info( "Errorin Run function with query %r" % (query,))

这将以一种可以将其粘贴回Python的方式显示查询对象,因此将转义特殊字符。在

另外,你也在吞咽应该显示的实际错误,只需简单地用“except”来捕捉所有的东西。你真的应该把它去掉,让Python显示回溯本身,或者

^{pr2}$

在最后一个空的except:下面。在

相关问题 更多 >