TypeError: '>' not supported between instances の原因と直し方
文字列と数値、あるいはNoneと数値など、比較できない型同士を比較しようとしたときに出るエラーです。
エラーメッセージの読み方
Traceback (most recent call last):
main.py- ファイル名
2- 行番号 — 実際にクラッシュした行
<module>- 発生場所 — <module> ならトップレベル、関数名ならその関数の中
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
'>' not supported between instances of 'str' and 'int'- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 age = "20" ^ 2 if age > 18: 3 print("adult")
Traceback (most recent call last):
File "main.py", line 2, in <module>
if age > 18:
^^^^^^^^
TypeError: '>' not supported between instances of 'str' and 'int'
文字列と数値は大小を比較できません。入力値を数値として扱うにはint()やfloat()で変換します。
直し方: "20" を 20 にします。
広告
広告スロット(未設定)
パターン2
1 score = "90" ^ 2 if score >= 60: 3 print("pass")
Traceback (most recent call last):
File "main.py", line 2, in <module>
if score >= 60:
^^^^^^^^^^^
TypeError: '>=' not supported between instances of 'str' and 'int'
input()で受け取った値は常にstr型です。数値として比較する前にint()で変換する必要があります。
直し方: "90" を 90 にします。
パターン3
1 x = None ^ 2 if x > 0: 3 print("positive")
Traceback (most recent call last):
File "main.py", line 2, in <module>
if x > 0:
^^^^^
TypeError: '>' not supported between instances of 'NoneType' and 'int'
初期値としてNoneを使った変数を、数値と直接比較するとエラーになります。値が入っているかを先にNoneチェックします。
直し方: None を 5 にします。
よくある誤解
Python 2では異なる型同士の比較でもエラーにならず、何らかの順序で比較できてしまいました。Python 3では明確にエラーになるよう変更されています。
まとめ
TypeError: '>' not supported between instancesは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。