首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何捕获特定的pyodbc错误消息

如何捕获特定的pyodbc错误消息
EN

Stack Overflow用户
提问于 2012-07-09 17:52:59
回答 5查看 54.3K关注 0票数 22

我调整了下面的代码,

代码语言:javascript
复制
import pyodbc
try:
    pyodbc.connect('DRIVER={%s};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s' % (driver, server, database, uid, password))
except pyodbc.Error, err:
    logging.warn(err)

我得到的错误消息格式是

代码语言:javascript
复制
('HY000', "[HY000] [MySQL][ODBC 5.1 Driver]Access denied for user 'root'@'192.168.2.27' (using password: YES) (1045) (SQLDriverConnect)")

我只想接收错误的消息部分,即

代码语言:javascript
复制
Access denied for user 'root'@'192.168.2.27'(using password: YES)

我不知道我是否可以捕获错误,特别是,驱动程序找不到,主机关闭等。

我还尝试捕获错误,如下所示:

代码语言:javascript
复制
 except pyodbc.OperationalError, err:
    logging.warn(err)
except pyodbc.DataError, err:
    logging.warn(err)
except pyodbc.IntegrityError, err:
    logging.warn(err)
except pyodbc.ProgrammingError, err:
    logging.warn(err)
except pyodbc.NotSupportedError, err:
    logging.warn(err)
except pyodbc.DatabaseError, err:
    logging.warn(err)
except pyodbc.Error, err:
    logging.warn(err)

但最后一个总是捕捉到错误。

更糟糕的是,我发现pyodbc.Error.message总是空的。如何才能仅获取错误中的消息。

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-03 00:18:43

pyodbc似乎只是包装底层ODBC实现中的错误/异常,因此您不太可能做到这一点。

票数 8
EN

Stack Overflow用户

发布于 2017-02-10 01:57:10

这对我很有效。

代码语言:javascript
复制
    try:
        cnxn = pyodbc.connect(...)
    except pyodbc.Error as ex:
        sqlstate = ex.args[0]
        if sqlstate == '28000':
            print("LDAP Connection failed: check password")

有不同的SQLSTATES,您可以使用if-else语句来打印原因。

类似地,

代码语言:javascript
复制
  try:
        cnxn = pyodbc.connect(...)
  except pyodbc.Error as ex:
        sqlstate = ex.args[1]
        print(sqlstate) 

将为您提供错误的第二部分和描述。例如,ex.args[0]提供28000ex.args[1]提供[28000] LDAP authentication failed for user 'user' (24) (SQLDriverConnect)

然后,您可以在那里使用字符串操作技术来打印出您想要的内容。希望这能有所帮助。

票数 48
EN

Stack Overflow用户

发布于 2015-06-03 06:36:30

在pyodbc 3.0.7中,它可以很好地捕获pyodbc.ProgrammingError (以及其他错误类型,尽管我还没有尝试过)。然而,错误的内容仍然有些神秘,所以可能很难对错误进行更细粒度的处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11392709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档