Code Fix

初級

ZeroDivisionError: division by zero の原因と直し方

0による除算・剰余算で発生する例外です。/ と // と % のいずれでも、分母や除数が0だと例外になります。

エラーメッセージの読み方

Traceback (most recent call last):
main.py
ファイル名
3
行番号 — 実際にクラッシュした行
<module>
発生場所 — <module> ならトップレベル、関数名ならその関数の中
ZeroDivisionError
例外クラス — 何が起きたか。ここを検索するのが最短です
division by zero
詳細メッセージ — どの値が問題だったか

このエラーが出る典型パターン

パターン1

 1  a = 10
 2  b = 0 
         ^
 3  print(a / b)
Traceback (most recent call last): File "main.py", line 3, in <module> print(a / b) ~~^~~ ZeroDivisionError: division by zero

int型同士の割り算でも分母が0だと例外になります。floatに変えても解決しません。0で割ろうとした時点でエラーです。

直し方: 05 にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  a = 10
 2  b = 0 
         ^
 3  print(a % b)
Traceback (most recent call last): File "main.py", line 3, in <module> print(a % b) ~~^~~ ZeroDivisionError: integer modulo by zero

剰余演算子 % も同じです。0で割った余りは定義できないため、Pythonは例外を投げます。

直し方: 05 にします。

この問題を解いてみる →

パターン3

 1  a = 10
 2  b = 0 
         ^
 3  print(a // b)
Traceback (most recent call last): File "main.py", line 3, in <module> print(a // b) ~~^^~~ ZeroDivisionError: integer division or modulo by zero

切り捨て除算 // でも同様に例外になります。/ と // のどちらを使っても、分母が0であることは変わりません。

直し方: 05 にします。

この問題を解いてみる →

よくある誤解

int型同士だけの話だと思われがちですが、Pythonでは浮動小数点数(float)同士の0除算も ZeroDivisionError になります。他の言語ではfloatの0除算がInfinityになることがあり、その前提を持ち越すと痛い目に遭います。

まとめ

ZeroDivisionError: division by zeroは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)