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

2024-05-19 12:03:17 发布

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

我查了下面的密码

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)

我得到的错误消息格式是

('HY000', "[HY000] [MySQL][ODBC 5.1 Driver]Access denied for user 'root'@'192.168.2.27' (using password: YES) (1045) (SQLDriverConnect)")

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

Access denied for user 'root'@'192.168.2.27'(using password: YES)

我不知道我是否能抓住错误,特别是,司机找不到,主机关闭等。。

我还尝试捕捉错误:

 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总是空的。 我怎么能只得到错误中的信息。

谢谢


Tags: 消息foraccesslogging错误errorrootpassword
3条回答

在pyodbc 3.0.7中,捕获pyodbc.ProgrammingError(可能还有其他错误类型,尽管我还没有尝试过)工作得很好。不过,错误的内容仍然有点晦涩,因此可能很难对错误进行更细粒度的处理。

这对我有效。

    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语句来打印原因。

同样地

  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)

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

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

相关问题 更多 >

    热门问题