Pythonにおけるエラーについて【初心者向け解説記事】
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
Pythonにおけるエラーとは?
Pythonにおけるエラーとは、プログラムの実行中に発生する問題や予期しない動作を指します。エラーが発生すると、Pythonは通常、エラーメッセージを出力し、問題のある部分を特定する手がかりを提供します。エラーメッセージには通常、エラーが発生した行番号、エラーの種類、そしてエラーの詳細な説明が出力されます。
Pythonびおけるエラーは大きく 構文エラー(Syntax Errors)と例外(Exceptions)の2つのカテゴリーに分けられます。
構文エラー
Pythonプログラムは特定の文法に従って記述する必要があります。構文エラー、またはパースエラーとは、Pythonの文法に従っていないコードが存在するときに発生します。これはコードがPythonにとって解釈不能であるときに発生します。構文エラーは、コードを初めて書く際によく遭遇するエラーで、エラーメッセージには問題のある行が指摘され、エラーの位置を示す小さな「矢印」が表示されることがあります。
例として、以下のようなコードが考えれられます。
print("Hello, World!"
閉じカッコを書き忘れたため、Pythonが構文を理解することが出来ず、以下のようなエラーが発生します。
C:\***\python.exe C:/***/test.py runserver
File "C:\***\test.py", line 2
^
SyntaxError: unexpected EOF while parsing
エラーメッセージを訳すと「構文エラー:パース中に予期しないEOFが発生しました」となります。EOFは"End Of File"の略語で、ファイルの終わりを示し、Pythonがファイルの終わりまで読み込んだが、閉じカッコがないためエラーが起きたことになります。
エディタによっては、構文エラーを自動で検出する場合があります。画像で使用しているエディタはPyCharmです。
例外
例外は、プログラムが文法的には正しいにもかかわらず、実行中に問題が発生したときに起きます。例えば、存在しないファイルを開こうとしたり、0で数値を割ろうとしたりすると例外が発生します。例外にはさまざまな種類があり、それぞれ特定のエラー状況に対応しています。
ここでは、その一例を挙げたいと思います。これ以外にも、Pythonには様々な例外があります。
ZeroDivisionError
数学の原則から、0で何かを割ることはできません。Pythonでは、0で割り算を試みるとZeroDivisionErrorが発生します。これは割り算の演算子を使用しているコードを見直し、0で割り算が発生しないようにする必要があります。
例として、以下のようなコードがZeroDivisionErrorを起こします。
a = 1 / 0 # ZeroDivisionError: division by zero
TypeError
TypeErrorは、操作が対象のオブジェクト型に対して適切でないときに発生します。例えば、文字列を数値として加算しようとするとこのエラーが発生します。
例として、以下のようなコードがTypeErrorを起こします。
a = 1 + "あいうえお" # TypeError: unsupported operand type(s) for +: 'int' and 'str'
ValueError
ValueErrorは、関数に適切でない引数が渡されたときに発生します。たとえば、整数を期待する関数に文字列を渡すと、このエラーが発生します。このエラーを修正するには、関数に渡される引数の型を見直す必要があります。
例として、以下のようなコードがValueErrorを起こします。int関数は、文字列型で表された数字や少数を整数型に変換する関数です。
int_value = int("Python") # ValueError: invalid literal for int() with base 10: 'Python'
IndexError
このエラーは、存在しないインデックスを参照しようとしたときに発生します。存在しないインデックスを参照しようとするとIndexErrorが発生します。
例として、以下のようなコードが考えられます。このコードでは、リストの3番目を参照しようとして、インデックスに3を指定していますが、インデックスは0から始まるため存在しない4番目のインデックスを参照しようとしています。
list = [1, 2, 3]
a = list[3] # IndexError: list index out of range
KeyError
Pythonの辞書は、キーと値を持つデータ構造です。存在しないキーを指定するとKeyErrorが発生します。
例として、以下のようなコードが考えられます。
dict = {'one': 1, 'two': 2, 'three': 3}
print(dict['four']) # KeyError: 'four'
例外の作成
Pythonでは、自分で新しい例外を作成することも可能です。これは、プログラム内で特定の条件が満たされたときに特定のエラーメッセージを表示したい、または特定の動作を強制したいときなどに非常に便利です。
例外の作成は、raiseステートメントを使用して行います。以下にその例を示します。
def validate_age(age):
if age < 0:
raise ValueError("年齢は負の値にはできません。")
elif age > 150:
raise ValueError("入力された年齢は現実的ではありません。")
validate_age(-1) # ValueError: 年齢は負の値にはできません。
validate_age(200) # ValueError: 入力された年齢は現実的ではありません。
この例では、関数validate_ageは引数として年齢を受け取り、それが0未満または150より大きい場合、raiseステートメントを使ってValueError例外を発生させています。この例外は自分で定義したエラーメッセージと共に発生します。
論理エラー
論理エラーは、コードが構文的には正確で、例外も発生せずに実行できるが、期待した結果を生成しないときにそう呼ばれます。コードは記述した通りに正常に動作しているため、正確にはエラーや例外ではありません。この手のエラーは最も見つけにくいエラーであり、デバッグに時間がかかることがよくあります。プログラムが期待した動作をしないとき、または期待した結果を得られないとき、それは論理エラーが存在する可能性を示しています。このような論理エラーを見つけるには、適切なテストコードを書くことが重要です。
例えば、次のコードについて考えてみます。
def divide(a, b):
return a * b
print(divide(10, 2))
このdivide関数は2つの数値を引数とし、その割り算の結果を返すことを意図しています。しかし、実際には掛け算の結果を返しているため、意図した結果とは異なる結果が得られます。
まとめ
Pythonのエラーは、コードの問題を解決するための重要な手がかりを提供します。エラーメッセージはエラーの原因となったコードの位置とエラーの種類を示し、解決の方向を示してくれます。エラーメッセージを読み解き、適切に対処することで、コードの問題を解決し、プログラムを改善することができます。
【著者】
フォワードソフト株式会社のエンジニア。Java、Python、JavaScript、C#などの言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をする方法を考えるのが好きです。 最近はジェネレーティブAIの業務利用に関する検証を行っています。 資格を通じて知識を吸収することを心がけており、セキュリティスペシャリスト、データベーススペシャリスト、応用情報技術者、Oracle Certified Java Programmer Gold SE 11、Pythin3 エンジニア認定試験、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。
正社員/フリーランスの方でこのようなお悩みありませんか?
- 自分に合う案件を定期的に紹介してもらいたい
- 週2、リモートワークなど自由な働き方をしてみたい
- 面倒な案件探し・契約周りは任せて仕事に集中したい
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート