CTC 教育サービス
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes
こんにちは、吉政創成 菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。
現在学習中の5章「怪しいコード臭」では、バグを未然に防ぐために、どういった点に注意した方が良いのか、対処するか否かの判断について学んでいます。
今回は例外処理についてです。
プログラムを動かしているときに予期しない問題が発生してしまった場合、プログラムが停止し、エラーメッセージが表示されます。この状態を「例外」と言いますが、例外が発生した場合でもプログラムが停止せずに処理を継続させられるよう適切な指示をあらかじめ出しておくことを「例外処理」と言います。
この例外処理をしておかなかった場合、処理が完了する前に停止するということなので、データが失われたり、中途半端なまま放置されたり、開いていたファイルが閉じられなかったり、データベースと接続していた時には切断できないままになったりというような問題が発生してしまうことがあるそうです。
そのため、正常な結果を得るためには例外処理を適切に行っておく必要があるのですが、この例外処理を書くときの注意点が今回のテーマです。
---------------------------------------------------------------
P.84
エラーを処理するためのコードを書くexceptブロックを用意することで、クラッシュを防ぐことができます。しかしエラーをどのように処理するか決めるのは難しいので、プログラマーはpass文を使ってexceptブロックを空にしてしまいがちです。次のコードではpassを使って、何もしないexceptブロックを作成しています。
このコードはint()に’forty two’を渡してもクラッシュしません。int()が発生させるValueErrorはexcept文で処理されるからです。しかし、エラーに対して何もしないのはクラッシュよりもまずいかもしれません。不正なデータや不完全な状態で実行され続けるのを避けるためプログラムがクラッシュするのであって、それを回避すれば後でさらに厄介なバグを引き起こすかもしれません。
---------------------------------------------------------------
「pass」にすることは「何もしない」ということになるので、例外を握りつぶしてなかったことにしている状態になります。なので、例えば数値(int)が必要なところに文字列(str)を引き渡されても気づけないため、最終的に出てきたデータが正しいものではない、もしくは、予期していなかった動作を行ってしまうといったようなことが起きてしまうということになります。
また、どこにバグがあったのかを把握しづらくなってしまうため、小さな問題だったものが大きな問題に発展してしまうこと、バグ修正にかかる時間が長くなってしまうなどの問題が起きてしまうことがあるようです。
こういったことが起きないよう、例外処理を書く際には、問題が起きている箇所や事象をきちんと把握したうえで、そのプログラムに対して適切な処置を決め、指示しておく必要があるということのようです。具体的な内容を調べてみたところ、例えばわかりやすいエラーメッセージを表示させたり、代わりに入れる値を決めて置いたり、後で分析できるようにログを取れるようにしたり、プログラムを終了したりと言ったようなことが挙げられていました。
というわけで、passを使うのは「本当に何もしなくていいよ!」という時だけに限ってねということです。ちなみに、passはif文やループ処理で何も処理する必要が無い時に使われたりしますが、それ以外だと、開発途中でまだその機能ができていない時にもpassを代わりに置いておくことはよくあるというのを聞いたことがあります。
ところで例外で処理を継続できなくなったときに、ユーザーにその理由を表示して知らせるエラーメッセージについても書かれています。
---------------------------------------------------------------
P.85
このコードはクラッシュしないという点ではよいのですが、問題解決に必要な情報がユーザーに伝わりません。エラーメッセージは、プログラマーではなくユーザーが読むものです。このエラーメッセージでは、int()関数への参照のようなユーザーに理解できない技術的な内容が含まれているだけでなく、問題を解決する方法も示されていません。エラーメッセージは、何が起こったのかを説明するだけでなく、ユーザーが何をすべきかを説明する必要があるのです。
---------------------------------------------------------------
確かに、アプリを使っているときに「エラーコード:xxx」と書かれてもどうすればいいのよ...と思うことがありますね。エラーコードを検索しますし、検索結果でああ書ききれなかったのねと思う事はありますけど。それでも、明確にそこに書かれていたら何をすればいいのかすぐにわかるのでとても助かると思います。
ではどんなエラーメッセージを?と言えば、例えば「ファイルが見つからないのでファイル名を確認してください」とか、「電話番号はハイフンを入れて書いてください」とか、「●●にご連絡ください」というような内容になるかと思います。
一方で、問題が起きた時に解決する側の開発者であれば、詳細な情報が必要になると思いますので、システムログに書き出すような指示を書いておいたり、何がいつどこでどういった問題が発生しているのかというPythonが出すようなエラーメッセージ(Traceback)を表示したりという事になると思います。
今回は例外と例外処理、エラーメッセージについて学びました。
それではきりが良いので、今回はこちらで終了です。今回もお付き合いいただきありがとうございました。
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes