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で割ろうとした時点でエラーです。
直し方: 0 を 5 にします。
広告
広告スロット(未設定)
パターン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は例外を投げます。
直し方: 0 を 5 にします。
パターン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であることは変わりません。
直し方: 0 を 5 にします。
よくある誤解
int型同士だけの話だと思われがちですが、Pythonでは浮動小数点数(float)同士の0除算も ZeroDivisionError になります。他の言語ではfloatの0除算がInfinityになることがあり、その前提を持ち越すと痛い目に遭います。
まとめ
ZeroDivisionError: division by zeroは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。