Code Fix

初級

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チェックします。

直し方: None5 にします。

この問題を解いてみる →

よくある誤解

Python 2では異なる型同士の比較でもエラーにならず、何らかの順序で比較できてしまいました。Python 3では明確にエラーになるよう変更されています。

まとめ

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

演習をはじめる

関連するエラー

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