我调整了下面的代码,
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总是空的。如何才能仅获取错误中的消息。
谢谢
发布于 2012-08-03 00:18:43
pyodbc似乎只是包装底层ODBC实现中的错误/异常,因此您不太可能做到这一点。
发布于 2017-02-10 01:57:10
这对我很有效。
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]
提供28000
,ex.args[1]
提供[28000] LDAP authentication failed for user 'user' (24) (SQLDriverConnect)
然后,您可以在那里使用字符串操作技术来打印出您想要的内容。希望这能有所帮助。
发布于 2015-06-03 06:36:30
在pyodbc 3.0.7中,它可以很好地捕获pyodbc.ProgrammingError (以及其他错误类型,尽管我还没有尝试过)。然而,错误的内容仍然有些神秘,所以可能很难对错误进行更细粒度的处理。
https://stackoverflow.com/questions/11392709
复制相似问题