この記事は以下の方を対象としています。
- Pythonによる自動処理をされている方
- Pythonのプログラムが動かない場合にはどのような場合があるか知りたい方
- Pythonのエラーと例外の違いを知りたい方
本コラムのゴール
・プログラムが正常に動作しないときにはどのような場合があるか理解できる。
・Pythonにおけるエラーと例外の違いを説明できる。
(1)プログラムの動作不具合の分類
みなさんの中には、職場ではじめてPythonを使い始めるという方も多いと思います。
今回は、初めてPythonを使う方や、プログラミングに挑戦される皆様に向けて、プログラムがうまく動かないときの対応方法についてお話しさせていただきます。プログラム作成のプロフェッショナルであっても、修正を繰り返しながら進めることは日常茶飯事です。プログラムが正常に動作しない場合の原因を分類し、それぞれの対策方法について解説いたします。
プログラムが動かない理由の分類
プログラムが正常に動作しない場合、その原因は多岐にわたります。ここでは、一般的な原因を以下のように分類し、それぞれの対策方法について述べます。
①文法上の間違い
②文法は正しいが、実行できない。
③文法は正しくて、実行可能であるが、結果が間違っている
④文法は正しくて、テストデータ等ではうまく動作するが、業務用のデータでは間違っている
⑤文法は正しくて、業務用のデータでも通常は正しく動作するが、まれに異常を起こす
プログラムを作るときの課題は、まず、文法上の問題をクリアすることで、最終的には、長期間利用しても問題のないようにし、安定稼働ができるようにする必要があります。
上記を概念的に表すと以下の図のようになります。
なお、この図は概念を表しており、1つのプログラムに全ての内容が該当するわけではありません。
図1 プログラムの問題点の概念図
それでは、具体的に各分類について詳しく見ていきましょう。
①文法上の間違い
プログラムが正常に動作しない最も基本的な原因は、文法上の間違い、いわゆる「構文エラー」です。構文エラーとは、プログラムの文法に違反している箇所があるため、プログラムが実行されない状態を指します。
Pythonは実行前にプログラム全体の文法をチェックします。文法上の間違いがあると、プログラムを実行しません。
②文法は正しいが、実行できない
構文チェックをクリアしたにもかかわらず、プログラムが実行できない場合があります。これは「例外」が原因であることが多くあります。例外とは、プログラム実行中に発生するエラーであり、例えばゼロでの除算や存在しないファイルへのアクセスなどが典型的な例です。例外が発生すると、プログラムはその時点で停止します。
③文法は正しくて、実行可能であるが、結果が間違っている
プログラムが実行できても、得られる結果が期待通りでない場合があります。これはロジックの誤りやデータの扱いに問題があることが多いです。例えば、計算式の間違いや条件分岐のミスなどが原因で、意図しない結果が得られることがあります。
このような場合、テストデータを使用して結果を検証し、期待される値と比較することが重要です。
また、プログラムの実行過程を追跡し、どの部分で誤りが発生しているかを特定することが有効です。
業務の自動化において、自分の担当業務を自分でPythonのプログラムを作って効率化させる場合は、業務内容をよく理解しているので、比較的容易にチェックすることができます。
④文法は正しくて、テストデータ等ではうまく動作するが、業務用のデータでは間違っている
テストデータでうまく動作するプログラムが、実際の業務データでは誤動作することがあります。これはデータの規模や形式の違いが原因です。テストデータとして簡単なケースや少量のデータで行った場合、実際の業務データのような大規模データや複雑なケースに対応できないことがあります。
このような場合、できるだけ実運用環境に近いデータを用いてテストを行い、プログラムの動作を確認することが重要です。
たとえば、同じファイルに自動処理の結果を書き続けていると、ファイルサイズが大きくなり、レスポンスが低下し、動作に影響が出ることがあります。
⑤文法は正しくて、業務用のデータでも通常は正しく動作するが、まれに異常を起こす
通常は正常に動作するが、特定の条件下で異常を起こす場合があります。これは、異常系の処理のチェックが甘いこと、リソースの制限などが原因であり、異常発生時のログを確認することで原因を特定しやすくなります。
このような場合、異常が発生する状況を再現したり、詳細なログを分析することで原因を突き止めます。その上で、プログラムの修正やリソース管理の改善を行い、異常発生を防ぐ対策を講じることが求められます。
(2) 構文エラーと例外とは
前項でプログラムの実行中に遭遇するエラーは大きく分けて「構文エラー」と「例外」の2種類があると説明しました。ここでは、もう少し詳しく説明します。
(2.1)Pythonの実行ボタンを押したときの動作
Pythonでは、プログラムの実行ボタンを押すと、プログラムの処理をする前に、構文チェックを行います。構文チェックというのは、文法上の間違いのチェックのことです。つまり、最初から最後までの文法上のチェックをしてから、プログラムを実行します。
(2.2)構文エラーとは
文法上の間違いがあると、「構文エラー」として、エラーメッセージ「syntax error」を表示します。
このため、「構文エラー」がプログラムの最後の行にある場合でも、途中まで正しい内容であっても動かすことはできません。
(ExcelのVBAはできているところまで動かしてくれます。)
(2.3)例外とは
「例外」とは、プログラム実行中に発生するエラーです。文法は正しいが、特定の状況でエラーが発生する場合を指します。例えば、ゼロでの除算、存在しないファイルへのアクセス、配列の範囲外へのアクセスなどが例外の典型例です。例外が発生すると、プログラムはその時点で停止します。
例えば、数値を0で割った場合は、「ZeroDivisionError」を表示します。
(2.4)エラーメッセージの例
初心者の方がプログラミングを学ぶ際、以下のようなエラーメッセージを1つずつ解消しながら、習得していくことになると思います。
初心者の方は、構文エラー、例外の場合が多いと思います。
構文エラーを表すエラーメッセージの例
SyntaxError: invalid syntax
例外の例を表すエラーメッセージの例
ZeroDivisionError
エラーメッセージをよく読み、問題の箇所を理解することが重要です。エラーメッセージには、エラーの発生場所や内容が記載されているため、これを手がかりに修正を行いましょう。
結論
プログラムの動作不具合を分類し、それぞれの特性と対処法を理解することは、Pythonを学ぶ上で非常に重要です。構文エラーや例外に適切に対処することで、より安定したプログラムを作成することができます。初心者の皆様も、エラーメッセージを恐れずに、少しずつステップアップしていきましょう。
プログラミングは試行錯誤の連続ですが、問題を一つ一つ解決していくことで、確実にスキルが向上します。皆様がPythonを習得するのにお役に立ちましたら幸いです。