24

私は次のコードを試しました、

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が常に空であることがわかりました。エラーのメッセージだけを取得するにはどうすればよいですか。

ありがとう

4

5 に答える 5

9

pyodbc は、基になる ODBC 実装からのエラー/例外をラップしているように見えるため、これを実行できる可能性は低いです。

于 2012-08-02T16:18:42.747 に答える
3

pyodbc 3.0.7 では、pyodbc.ProgrammingError をキャッチするのに問題なく動作します (試したことはありませんが、おそらく他のエラー タイプも)。ただし、エラーの内容はまだわかりにくいため、エラーをより細かく処理するのは難しい場合があります。

于 2015-06-02T22:36:29.613 に答える