Last Updated on 2025年7月28日
Pythonでよく遭遇するエラーの一つが ZeroDivisionError: division by zero です。このエラーは、その名の通り「0で割ろうとした」時に発生します。一見単純に見えるエラーですが、意図せず発生するケースもあり、初心者だけでなく経験者でも注意が必要です。
目次
概要
このエラーは、Pythonの数値演算において、除算(割り算)の除数が0である場合に発生します。数値的に0で割ることは定義されておらず、プログラム実行時に例外として報告されます。
エラー内容
次のようなコードを実行すると、ZeroDivisionErrorが発生します。
|
1 2 3 4 |
num = 10 result = num / 0 print(result) |
実行結果は以下の通りです。
|
1 2 3 4 5 |
Traceback (most recent call last): File "main.py", line 2, in <module> result = num / 0 ZeroDivisionError: division by zero |
原因
このエラーの原因は明確で、**割り算の分母(除数)がゼロ**であることにあります。Pythonではゼロによる除算は数学的に無効であるため、プログラム実行時にエラーを発生させて処理を中断します。
以下のようなケースでも発生します:
- ユーザーの入力値が0である場合
- 計算結果や取得したデータが0だった場合
- 整数除算(//)や剰余(%)でも同様に発生
|
1 2 3 |
# 例:剰余でのゼロ除算 value = 5 % 0 # → ZeroDivisionError |
対処法
ゼロで割ってしまうような状況を事前にチェックすることで、エラーの発生を防ぐことができます。以下にいくつかの対策を示します。
1. 条件分岐で除数が0か確認する
|
1 2 3 4 5 6 7 |
denominator = 0 if denominator != 0: result = 10 / denominator else: result = None print("0で割ることはできません。") |
2. try-exceptで例外処理を行う
|
1 2 3 4 5 |
try: result = 10 / 0 except ZeroDivisionError: print("除数が0のため、計算できません。") |
3. 関数化して安全に除算する
|
1 2 3 4 5 6 7 8 |
def safe_divide(a, b): if b == 0: return None return a / b print(safe_divide(10, 2)) # 5.0 print(safe_divide(10, 0)) # None |
4. 入力値をチェックする
|
1 2 3 4 5 6 7 8 9 |
user_input = input("割る数を入力してください: ") try: num = int(user_input) print(100 / num) except ZeroDivisionError: print("0で割ることはできません。") except ValueError: print("数値を入力してください。") |
補足
浮動小数点数との違い
浮動小数点数(float)では、0.0で割ってもエラーになる場合があります。
|
1 2 |
print(10.0 / 0.0) # → ZeroDivisionError |
また、NumPyなどのライブラリでは挙動が異なる場合もあり、infやnanが返るケースもあります。
|
1 2 3 4 |
import numpy as np print(np.divide(10, 0)) # → inf(警告は出る) |
整数の切り捨て除算(//)も注意
|
1 2 |
print(10 // 0) # → ZeroDivisionError |
まとめ
ZeroDivisionErrorはPythonにおける基本的なエラーでありながら、意外と見落としやすい場面でも発生します。特に、ユーザー入力や外部データを使う際は注意が必要です。
安全にプログラムを実行するためには、次のポイントを意識しましょう:
- 割り算の前にゼロチェックを行う
- try-except構文でエラーをキャッチする
- 例外の内容をログやメッセージに出力して把握する
エラーは回避できるようになると、プログラムの安定性が一気に向上します。是非、今回の内容を自分のコードにも取り入れてみてください。


