Pythonの「division by zero」エラーの原因と対処法|0で割るときの解決方法

Pythonでプログラムを実行していると、次のようなエラーが表示されることがあります。

ZeroDivisionError: division by zero

「division by zero」とは、0で割り算をしようとしたときに発生するPythonのエラーです。

たとえば、次のコードを実行するとエラーになります。

x = 10
y = 0

print(x / y)

実行結果:

ZeroDivisionError: division by zero

この記事では、Pythonの「division by zero」の意味、発生原因、具体的な対処法、再発を防ぐ方法について初心者向けに解説します。


「division by zero」の意味

division by zero は、日本語では「0による除算」という意味です。

Pythonでは、整数や浮動小数点数を0で割ることはできません。

10 / 0

この処理を実行すると、

ZeroDivisionError: division by zero

が発生します。

エラーの種類は、

ZeroDivisionError

です。

つまり、

計算の途中で、割る数が0になっている

ことがエラーの直接的な原因です。


「division by zero」が発生する例

1. 0で直接割っている

最も単純なケースです。

a = 10
b = 0

result = a / b

b が0なので、

ZeroDivisionError: division by zero

が発生します。


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

コードを見ただけでは0で割っているように見えなくても、変数の値が0になっている場合があります。

price = 1000
count = 0

average = price / count

この場合も、

ZeroDivisionError: division by zero

となります。

重要なのは、/ の右側にある値です。

price / count
       ↑
    ここが0

3. ユーザー入力が0だった

ユーザーから数字を入力してもらうプログラムでは、0が入力される可能性があります。

num = int(input("数字を入力してください: "))

result = 100 / num
print(result)

ユーザーが、

0

と入力するとエラーになります。

このような場合は、計算する前に0かどうかを確認する必要があります。


「division by zero」の対処法

最も基本的な対処方法は、割る数が0ではないことを確認してから計算することです。

if文で0をチェックする

a = 10
b = 0

if b != 0:
    result = a / b
    print(result)
else:
    print("0で割ることはできません")

実行結果:

0で割ることはできません

b != 0 は、

b が0ではない

という条件です。


0の場合に別の処理をする

たとえば、割る数が0なら計算を行わないようにできます。

a = 10
b = 0

if b == 0:
    print("計算できません")
else:
    print(a / b)

この方法は初心者にも分かりやすく、実務でもよく使われます。


try-exceptでZeroDivisionErrorを処理する

Pythonでは、try と except を使ってエラーを処理することもできます。

try:
    result = 10 / 0
    print(result)
except ZeroDivisionError:
    print("0で割ることはできません")

実行結果:

0で割ることはできません

ZeroDivisionErrorが発生した場合に、except の処理が実行されます。


ユーザー入力とtry-exceptを組み合わせる

たとえば、次のようなプログラムにできます。

try:
    a = int(input("割られる数: "))
    b = int(input("割る数: "))

    print(a / b)

except ZeroDivisionError:
    print("割る数には0以外を指定してください")

ユーザーが0を入力しても、プログラムが突然停止するのを防げます。


「/」だけでなく「%」でも発生する

ZeroDivisionError は通常の割り算だけではありません。

余りを求める % 演算子でも発生します。

10 % 0

実行すると、

ZeroDivisionError: integer modulo by zero

となります。

同様に、整数の商を求める // でも発生します。

10 // 0

結果:

ZeroDivisionError: integer division or modulo by zero

したがって、次のような演算では0に注意する必要があります。

/
//
%

関数の中で「division by zero」が発生する場合

関数を使っている場合、引数に0が渡されることでエラーになることがあります。

def divide(a, b):
    return a / b

print(divide(10, 0))

この場合、

ZeroDivisionError: division by zero

が発生します。

関数側でチェックすることもできます。

def divide(a, b):
    if b == 0:
        return None

    return a / b

print(divide(10, 0))

平均値の計算で発生する「division by zero」

Python初心者が比較的遭遇しやすいのが、平均値を計算するときのエラーです。

たとえば、

numbers = []

average = sum(numbers) / len(numbers)

とすると、

len(numbers)

は 0 になります。

つまり、

0 / 0

を計算することになるため、ZeroDivisionError が発生します。


対処方法

リストが空かどうかを確認します。

numbers = []

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

よりシンプルに、

if numbers:
    average = sum(numbers) / len(numbers)

と書くこともできます。


割合・パーセント計算にも注意

割合を計算するときにも、分母が0になる可能性があります。

たとえば、

total = 0
success = 10

rate = success / total * 100

ではエラーになります。

割合を計算する場合は、分母となる total が0ではないことを確認します。

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

NumPyでは挙動が異なる場合がある

Python標準の数値計算では、

10 / 0

で ZeroDivisionError が発生します。

一方、NumPyの配列などでは、計算方法によってはPythonの例外ではなく inf や nan になる場合があります。

たとえば、NumPyを使うコードでは、単純に「0で割れば必ず ZeroDivisionError」とは限りません。

そのため、NumPyを利用している場合は、配列やデータの中に0が含まれていないかも確認しましょう。


「division by zero」の原因を調べる方法

エラーが発生したら、まずトレースバックを確認します。

たとえば、

Traceback (most recent call last):
  File "sample.py", line 5, in <module>
    result = a / b
             ~~^~~
ZeroDivisionError: division by zero

この場合、

File "sample.py", line 5

と表示されています。

つまり、sample.pyの5行目付近でエラーが発生したことが分かります。

そして、

result = a / b

の b が0になっていないか確認します。


print()で変数の値を確認する

原因が分からない場合は、計算前に変数の値を確認すると便利です。

print("a =", a)
print("b =", b)

result = a / b

たとえば、

a = 100
b = 0

と表示された場合、

b

が0になっていることが分かります。


よくある原因

Pythonで「division by zero」が発生する原因には、次のようなものがあります。

原因 例
0で割っている 10 / 0
変数が0 a / count
ユーザーが0を入力 100 / int(input())
空のリストを平均する sum(x) / len(x)
件数が0 success / total
% の右側が0 10 % 0
// の右側が0 10 // 0

「division by zero」を防ぐポイント

エラーを防ぐには、「分母が0になる可能性があるか」を考えることが重要です。

たとえば、

result = a / b

というコードがあった場合、

b は必ず0以外なのか?

を確認します。

ユーザー入力、データベース、CSV、API、リストなどから値を取得している場合は、特に注意が必要です。


あわせて読みたい

あわせてPythonでよく出るエラー一覧、TypeErrorとは?原因・よくあるエラー例・解決方法を初心者向けに解説、引数エラーとは?Pythonでよくある原因と解決方法を初心者向けに解説も参考になります。

学習の進め方は社会人におすすめする目的別「超効率プログラミング学習法」にまとめています。

まとめ

Pythonの

ZeroDivisionError: division by zero

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

基本的な対処方法は、計算前に分母が0ではないか確認することです。

if b != 0:
    result = a / b
else:
    print("0で割ることはできません")

また、try-exceptを利用して、

try:
    result = a / b
except ZeroDivisionError:
    print("0で割ることはできません")

のようにエラー処理を行うこともできます。

特に、平均値・割合・パーセント・件数などの計算では、分母が0になるケースをあらかじめ想定しておくことが大切です。


SEO向けFAQ

Q. Pythonの「division by zero」とは何ですか?

division by zero は、0で割り算をしようとしたときに発生するエラーです。Pythonでは ZeroDivisionError として通知されます。

Q. 「ZeroDivisionError: division by zero」の直し方は?

割る数が0ではないか確認し、0の場合は計算しないようにします。

if b != 0:
    result = a / b

Q. Pythonで0を割ることはできますか?

通常のPythonの数値計算では、0で割ることはできません。たとえば 10 / 0 を実行すると ZeroDivisionError が発生します。

Q. 0÷0でもZeroDivisionErrorになりますか?

はい。Pythonでは 0 / 0 も0による除算になるため、ZeroDivisionError が発生します。

Q. Pythonの「division by zero」はなぜ起こりますか?

計算に使用する分母が0になっていることが原因です。変数、ユーザー入力、空のリスト、データ件数などが0になっていないか確認すると原因を特定できます。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら