今日もまたWEBスクレイピングツール直した話。
-
PythonでGoogleとBingから画像を取得するWEBスクレイピングツールを作った
いろいろあって、画像を収集するWEBスクレイピングツールを作りました。 目次1 WEBスクレイピングツール1.1 ソース1.2 機能概要1.3 開発環境2 環境準備2.1 仮想環境作成2.2 必要なパ ...
続きを見る
修正内容はこれ。
SQLiteのエラーを拾う例外クラスを作る
今回からSQLiteを使うようになったんですが、tableがないとかqueryが間違ってるとか、いろんな理由でエラーを吐くわけです。
これをまとめて拾えないかなーということで、こんな感じにしてみました。
1 2 3 4 5 6 7 |
class CommonError(Exception): """すべてのエラーを拾うためのクラス """ class SqlError(CommonError): """SQL実行時にエラーが発生した場合に投げるエラー """ |
Exceptionを継承したCommonErrorクラスと、それをさらに継承したSqlErrorクラスを作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
def sql_execute(self, query, data = None): """SQLを実行する Arguments: query {[type]} -- [description] Keyword Arguments: data {[type]} -- [description] (default: {None}) Retruens: List -- 実行結果をLISTに変換したもの """ try: if data is None: self.cursor.execute(query) else: self.cursor.execute(query, data) self.connect.commit() return self.cursor.fetchall() except sqlite3.Error as e: pprint.pprint(e) raise SqlError(ERROR_MESSAGE['common_err_006'].format(e.args[0])) |
SQLiteのエラーはsqlite3.Errorで拾えます。
(デバッグ用のpprint消すの忘れた。。。)
エラーを拾ったら、raiseでSqlErrorを投げるようにします。
これで、SQLiteでエラーが起きたときにexceptで拾えるようになります。
1 2 3 4 |
try: # SQLiteを使う処理 except SqlError: # SQLiteでエラーが発生したときの処理 |
except:と書いておけば全部拾えるとはいえ、処理が増えてくると何の例外なのか調べるの大変ですもんね。。。
事前に予想ができる例外はわかりやすい名前で例外クラスを作ってハンドリングするのがよさそうです。