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になっていないか確認すると原因を特定できます。






