PythonのZeroDivisionErrorとは?意味・原因・直し方を初心者向けに解説

ながみえ

Pythonで割り算を使ったときに、ZeroDivisionError というエラーが表示されることがあります。

エラー名だけを見ると少し難しく感じるかもしれませんが、原因はとてもシンプルです。ZeroDivisionError は、0で割り算しようとしたときに発生するエラーです。

たとえば、平均点を計算するときや、割合を求めるとき、ユーザーが入力した数値で割り算するときなどに起こることがあります。

この記事では、Pythonの ZeroDivisionError の意味、よくある原因、エラーの直し方を初心者向けに解説します。

まずは、ZeroDivisionError がどのようなエラーなのかを確認していきましょう。

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド

ZeroDivisionErrorとは

ZeroDivisionError とは、Pythonで0を使って割り算しようとしたときに発生するエラーです。

たとえば、次のコードを見てみましょう。

result = 10 / 0
print(result)

このコードでは、100 で割ろうとしています。

しかし、数学でもプログラミングでも、0で割り算をすることはできません。そのため、Pythonは処理を続けられず、次のようなエラーを表示します。

ZeroDivisionError: division by zero

division by zero は、「0による割り算」という意味です。

つまり、このエラー文は「0で割り算しようとしています」と教えてくれています。

ZeroDivisionError が出たときは、まず割り算の右側にある値を確認しましょう。

result = 10 / 2
print(result)

このコードでは、102 で割っているため、エラーにはなりません。

また、ZeroDivisionError/ を使った割り算だけでなく、// を使った整数除算や、% を使った余りの計算でも発生します。

print(10 // 0)
print(10 % 0)

どちらも、右側の値が 0 になっているため、ZeroDivisionError が発生します。

初心者の方は、ZeroDivisionError を「割る数が0になっているときに出るエラー」と覚えておくと分かりやすいです。

ZeroDivisionErrorのエラー例と修正例

ここからは、実際に ZeroDivisionError が発生するコードと、その修正例を見ていきましょう。

ZeroDivisionError は原因が比較的分かりやすいエラーですが、実際のプログラムでは変数やリストの件数が関係していることもあります。

まずは、もっとも基本的な「0で割り算している」例から確認します。

0で割り算している

ZeroDivisionError の基本は、割り算の右側が 0 になっているケースです。

次のコードでは、100 で割ろうとしています。

result = 10 / 0
print(result)

このコードを実行すると、次のようなエラーが表示されます。

ZeroDivisionError: division by zero

division by zero は、「0による割り算」という意味です。

つまり、Pythonが「0で割り算しようとしています」と教えてくれています。

この場合は、割る数を 0 以外の値に修正します。

result = 10 / 2
print(result)

このコードでは、102 で割っているため、エラーは発生しません。

割り算で ZeroDivisionError が出たときは、まず / の右側にある値を確認しましょう。

変数の中身が0になっている

実際のプログラムでは、10 / 0 のように直接 0 を書くよりも、変数の中身が 0 になっていてエラーになることがよくあります。

たとえば、次のコードを見てみましょう。

total = 100
count = 0

average = total / count
print(average)

このコードでは、total / count と書かれています。

一見すると、直接 0 で割っているようには見えません。しかし、count の中身は 0 です。

そのため、実際には次の計算と同じになります。

average = 100 / 0

このように、割り算の右側にある変数の値が 0 になっていると、ZeroDivisionError が発生します。

修正するには、割り算をする前に、割る数が 0 ではないか確認します。

total = 100
count = 0

if count != 0:
    average = total / count
    print(average)
else:
    print("countが0なので平均を計算できません")

このコードでは、count0 ではない場合だけ割り算をしています。

count0 の場合は、無理に計算せず、メッセージを表示します。

ZeroDivisionError が出たときは、割り算に使っている変数の中身を print() で確認すると原因を見つけやすくなります。

total = 100
count = 0

print(count)

average = total / count
print(average)

このように書くと、割り算をする前に count の値を確認できます。

空のリストから平均を計算している

平均を計算するときにも、ZeroDivisionError はよく発生します。

特に、リストの中身が空になっている場合は注意が必要です。

たとえば、次のコードを見てみましょう。

scores = []

average = sum(scores) / len(scores)
print(average)

このコードでは、scores というリストの平均を求めようとしています。

平均は、合計をデータの件数で割って求めます。

今回のコードでは、次のような計算をしています。

意味結果
sum(scores)リスト内の合計0
len(scores)リスト内の件数0
sum(scores) / len(scores)合計を件数で割る0 / 0 になる

scores は空のリストなので、len(scores) の結果は 0 です。

そのため、sum(scores) / len(scores) は、結果的に 0 で割る計算になってしまい、ZeroDivisionError が発生します。

修正する場合は、リストにデータが入っているときだけ平均を計算します。

scores = []

if len(scores) > 0:
    average = sum(scores) / len(scores)
    print(average)
else:
    print("データがないため平均を計算できません")

このコードでは、len(scores)0 より大きい場合だけ平均を計算しています。

リストが空の場合は、平均を計算せずにメッセージを表示します。

平均点、売上の平均、レビュー評価の平均などを計算するときは、データの件数が 0 になっていないかを確認しましょう。

len() の結果を使って割り算している場合は、len()0 になる可能性がないかを考えることが大切です。

割合や達成率を計算している

割合や達成率を計算するときにも、ZeroDivisionError が発生することがあります。

割合を求めるときは、「一部の数 ÷ 全体の数」のように計算することが多いです。

たとえば、次のコードでは成功率を計算しようとしています。

success = 5
total = 0

rate = success / total * 100
print(rate)

このコードでは、success が成功した数、total が全体の数を表しています。

しかし、total の値が 0 になっています。

そのため、実際には次のような計算になります。

rate = 5 / 0 * 100

0で割り算しているため、ZeroDivisionError が発生します。

修正する場合は、割合を計算する前に、全体の数が 0 ではないか確認します。

success = 5
total = 0

if total != 0:
    rate = success / total * 100
    print(rate)
else:
    print("totalが0なので割合を計算できません")

このコードでは、total0 ではない場合だけ割合を計算しています。

total0 の場合は、割合を計算せずにメッセージを表示します。

割合や達成率を計算するときは、次のような値が分母になりやすいです。

分母になりやすい値
全体の件数商品数、参加者数、回答数
合計回数試行回数、アクセス数、クリック数
目標値売上目標、学習時間の目標
データ数リストの件数、集計対象の件数

これらの値が 0 になる可能性がある場合は、計算する前に if 文で確認しておくと安心です。

剰余演算で0を使っている

ZeroDivisionError は、/ を使った割り算だけでなく、% を使った剰余演算でも発生します。

剰余演算とは、割り算をしたときの余りを求める計算です。

たとえば、次のコードでは、10を3で割った余りを求めています。

remainder = 10 % 3
print(remainder)

10を3で割ると、余りは1です。

そのため、このコードでは 1 が表示されます。

しかし、次のように % の右側が 0 になっているとエラーになります。

remainder = 10 % 0
print(remainder)

このコードを実行すると、次のようなエラーが表示されます。

ZeroDivisionError: integer modulo by zero

modulo は、余りを求める計算のことです。

つまり、このエラーは「0で余りを求めようとしています」という意味です。

修正する場合は、% の右側にある値が 0 ではないか確認します。

divisor = 3

if divisor != 0:
    remainder = 10 % divisor
    print(remainder)
else:
    print("0では余りを計算できません")

% は、偶数・奇数の判定や、一定回数ごとの処理などでよく使われます。

そのため、右側の値を変数で指定している場合は、その変数が 0 になっていないか注意しましょう。

input()で0が入力されている

ユーザーに数値を入力してもらう処理でも、ZeroDivisionError が発生することがあります。

たとえば、次のコードでは、ユーザーが入力した数値で100を割ろうとしています。

number = int(input("割る数を入力してください:"))

result = 100 / number
print(result)

ここでユーザーが次のように入力したとします。

0

0 は整数に変換できるため、int() の部分ではエラーになりません。

しかし、そのあとで 100 / number を計算すると、number の中身が 0 なので、ZeroDivisionError が発生します。

この場合は、割り算をする前に、入力された値が 0 ではないか確認します。

number = int(input("割る数を入力してください:"))

if number != 0:
    result = 100 / number
    print(result)
else:
    print("0では割れません")

このコードでは、number0 ではない場合だけ割り算をしています。

ユーザーが 0 を入力した場合は、計算せずに「0では割れません」と表示します。

ここで、ValueError との違いも確認しておきましょう。

同じ input() を使った処理でも、入力内容によって発生するエラーが変わります。

入力された値発生する可能性があるエラー理由
abcValueErrorint() で整数に変換できないため
100円ValueError数字以外の文字が含まれているため
0ZeroDivisionError整数には変換できるが、0で割ることになるため
5エラーなし整数に変換でき、0でもないため

input() を使う場合は、「数値に変換できるか」と「0ではないか」の両方を確認する必要があります。

特に、電卓アプリや割合計算、平均計算のようにユーザー入力を分母に使う場合は、0が入力されたときの処理を用意しておきましょう。

ZeroDivisionErrorが出たときの確認ポイント

ZeroDivisionError が出たときは、割り算や余りの計算で、右側の値が 0 になっていないかを確認することが大切です。

直接 0 と書いていない場合でも、変数の中身や len() の結果が 0 になっているとエラーになります。

確認するときは、次のような順番で見ていくと原因を見つけやすくなります。

確認すること見るポイント
エラーメッセージの最後の1行division by zero などと表示されているか
割り算をしている場所/// を使っている行を確認する
余りを求めている場所% の右側が 0 になっていないか
分母に使っている変数変数の中身が 0 になっていないか
len() の結果空のリストや空のデータを使っていないか
ユーザー入力の値入力された数値が 0 ではないか
0の場合の処理if 文で事前に確認しているか

まず確認したいのは、エラーメッセージの最後の1行です。

たとえば、次のようなエラーが表示されたとします。

ZeroDivisionError: division by zero

このエラーは、0で割り算しようとしていることを表しています。

次に、コードの中で ///% を使っている場所を確認しましょう。

total = 100
count = 0

average = total / count
print(average)

このコードでは、total / count の部分で割り算をしています。

count の値が 0 なので、実際には 100 / 0 を計算していることになります。

変数の中身が分からない場合は、割り算をする前に print() で確認すると分かりやすいです。

total = 100
count = 0

print(count)

average = total / count
print(average)

このように書くと、割る数として使っている count の値を確認できます。

また、平均を計算している場合は、len() の結果にも注意が必要です。

scores = []

print(len(scores))

average = sum(scores) / len(scores)
print(average)

scores が空のリストの場合、len(scores)0 になります。

そのため、平均を計算しようとすると、0で割ることになってしまいます。

input() を使っている場合は、ユーザーが 0 を入力していないか確認しましょう。

number = int(input("割る数を入力してください:"))

print(number)

result = 100 / number
print(result)

このように、入力された値をいったん表示すると、どの値が原因でエラーになっているのかを確認できます。

ZeroDivisionError を解決するときは、エラーが発生した行だけを見るのではなく、割る数として使っている値がどこで決まっているのかを追いかけることが大切です。

特に、変数、リストの件数、ユーザー入力を使って割り算している場合は、実行時に値が 0 になっていないかを確認しましょう。

ZeroDivisionErrorを防ぐ書き方

ZeroDivisionError は、割り算や余りの計算をする前に、右側の値が 0 ではないか確認することで防ぎやすくなります。

特に、変数、リストの件数、ユーザー入力を使って計算している場合は、実行するまで値が分からないことがあります。

そのため、割る前に条件分岐を入れておくと安全です。

割る前に0ではないか確認する

もっとも基本的な対策は、割り算をする前に、割る数が 0 ではないかを確認することです。

たとえば、次のように if 文を使うと、ZeroDivisionError を防ぐことができます。

count = 0

if count != 0:
    result = 100 / count
    print(result)
else:
    print("0では割れません")

このコードでは、count0 ではない場合だけ割り算をしています。

count0 の場合は、割り算をせずにメッセージを表示します。

割合や平均を計算するときも、基本的な考え方は同じです。

total = 0
success = 5

if total != 0:
    rate = success / total * 100
    print(rate)
else:
    print("全体の数が0なので割合を計算できません")

このように、分母に使う値が 0 ではないかを先に確認しておくと、プログラムが途中で止まるのを防げます。

データがあるときだけ平均を計算する

平均を計算するときは、データの件数が 0 になっていないかを確認することが大切です。

リストの平均を求める場合は、len() の結果が 0 になることがあります。

scores = []

if len(scores) > 0:
    average = sum(scores) / len(scores)
    print(average)
else:
    print("データがありません")

このコードでは、scores にデータが入っている場合だけ平均を計算しています。

scores が空のリストの場合は、len(scores)0 になるため、平均を計算せずにメッセージを表示します。

また、リストそのものを条件式に使って確認することもできます。

scores = []

if scores:
    average = sum(scores) / len(scores)
    print(average)
else:
    print("データがありません")

Pythonでは、空のリストは条件式で False として扱われます。

そのため、if scores: と書くと、「リストにデータが入っている場合だけ処理する」という意味になります。

初心者のうちは、len(scores) > 0 のほうが意味を理解しやすいかもしれません。

慣れてきたら、if scores: のような書き方も覚えておくと便利です。

tryとexceptでエラーに対応する

try / except を使うと、ZeroDivisionError が発生したときの処理を用意できます。

たとえば、次のように書くことができます。

try:
    result = 100 / 0
    print(result)
except ZeroDivisionError:
    print("0では割れません")

このコードでは、try の中で 100 / 0 を計算しようとしています。

通常であれば ZeroDivisionError が発生してプログラムが止まりますが、except ZeroDivisionError が用意されているため、エラーが発生したときにメッセージを表示できます。

ユーザー入力を使う場合は、次のように書くこともできます。

try:
    number = int(input("割る数を入力してください:"))
    result = 100 / number
    print(result)
except ZeroDivisionError:
    print("0では割れません")
except ValueError:
    print("数字を入力してください")

このコードでは、2種類のエラーに対応しています。

入力された値によって、発生するエラーが変わるためです。

入力された値発生する可能性があるエラー対応するexcept
0ZeroDivisionErrorexcept ZeroDivisionError
abcValueErrorexcept ValueError
5エラーなし通常どおり計算する

try / except は便利ですが、すべての処理を何でも囲めばよいわけではありません。

ZeroDivisionError の場合は、割る数が 0 かどうかを事前に確認できることも多いです。

そのため、初心者のうちはまず if 文で確認する方法を身につけるとよいでしょう。

ユーザー入力や外部データのように、想定外の値が入る可能性がある場合は、try / except も組み合わせると安全です。

ZeroDivisionErrorに関するよくある質問

ここでは、Pythonの ZeroDivisionError について、初心者の方が疑問に感じやすいポイントをQ&A形式で整理します。

エラー文の意味や、0を直接書いていないのにエラーが出る理由、ValueError との違いなどを確認しておきましょう。

ZeroDivisionError: division by zero とはどういう意味ですか?

ZeroDivisionError: division by zero は、0で割り算しようとしたときに表示されるエラーです。

たとえば、次のコードでは ZeroDivisionError が発生します。

result = 10 / 0
print(result)

division by zero は、「0による割り算」という意味です。

つまり、Pythonが「0で割り算しようとしています」と教えてくれています。

このエラーが出たときは、まず / の右側にある値を確認しましょう。

0を直接書いていないのにZeroDivisionErrorが出るのはなぜですか?

コードの中に直接 0 と書いていなくても、変数の中身が 0 になっていると ZeroDivisionError が発生します。

たとえば、次のコードを見てみましょう。

total = 100
count = 0

average = total / count
print(average)

このコードでは、total / count と書かれています。

一見すると0で割っていないように見えますが、count の値が 0 なので、実際には 100 / 0 を計算していることになります。

変数の中身が原因かどうかを確認したいときは、割り算の前に print() を使うと分かりやすいです。

total = 100
count = 0

print(count)

average = total / count
print(average)

ZeroDivisionError が出たときは、割り算の右側にある変数の値を確認しましょう。

平均を計算するときにZeroDivisionErrorが出るのはなぜですか?

平均を計算するときに ZeroDivisionError が出る場合は、データの件数が 0 になっている可能性があります。

平均は、合計をデータの件数で割って求めます。

たとえば、次のコードではエラーが発生します。

scores = []

average = sum(scores) / len(scores)
print(average)

このコードでは、scores が空のリストです。

そのため、len(scores) の結果は 0 になります。

つまり、次のように0で割り算している状態になります。

average = 0 / 0

この場合は、リストにデータがあるときだけ平均を計算するように修正します。

scores = []

if len(scores) > 0:
    average = sum(scores) / len(scores)
    print(average)
else:
    print("データがないため平均を計算できません")

平均を計算するときは、len() の結果が 0 になっていないかを確認しましょう。

ZeroDivisionErrorはtry exceptで直すべきですか?

try / except を使うと、ZeroDivisionError が発生したときの処理を用意できます。

たとえば、次のように書くことができます。

try:
    result = 100 / 0
    print(result)
except ZeroDivisionError:
    print("0では割れません")

このコードでは、0で割り算したときにプログラムを止めず、「0では割れません」と表示できます。

ただし、ZeroDivisionError は割る数が 0 かどうかを事前に確認できることも多いです。

そのため、初心者のうちは、まず if 文で確認する方法をおすすめします。

number = 0

if number != 0:
    result = 100 / number
    print(result)
else:
    print("0では割れません")

ユーザー入力や外部データのように、どのような値が入るか分からない場合は、try / except を組み合わせるとより安全です。

まとめ|ZeroDivisionErrorは割る数を確認しよう

ZeroDivisionError は、Pythonで0を使って割り算や余りの計算をしようとしたときに発生するエラーです。

特に、/ を使った割り算、// を使った整数除算、% を使った剰余演算で、右側の値が 0 になっている場合に発生します。

コードに直接 0 と書いていなくても、変数の中身や len() の結果、ユーザーの入力値が 0 になっていると、ZeroDivisionError が出ることがあります。

エラーが出たときは、まずエラーメッセージの最後の1行を確認し、次に割り算や余りの計算で使っている右側の値を確認しましょう。

割る数が 0 になる可能性がある場合は、if 文で事前に確認したり、必要に応じて try / except を使ったりすると安全です。

ZeroDivisionError は原因を見つけやすいエラーです。あわてずに、「割る数が0になっていないか」を順番に確認していきましょう。

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド
記事URLをコピーしました