Pythonで書いたコードを試している中で、下記エラーメッセージがでました。
File xxx, line 37, in
print(set_range(10, 4, 7))
File xxx, line 33, in set_range
r = biggest(a, b, c) - smallest(a, b, c)
File xxx, line 10, in biggest
mx = bigger(bigger(a, b), c)
File xxx, line 4, in bigger
if a > b:
TypeError: > not supported between instances of ‘NoneType’ and ‘int’
前にも見た事があるエラーですが、その時は未熟者故Google先生に聞いても、一発で分かる様な回答が出てこなかった事から、出てきた回答が何を意味しているのか突き止める事ができず、一から作り直したり、そのコードから撤退したりしていました。
今回は解決で来たので備忘エントリーです。
エラーが出た元のhコードは下記のコードです。
def set_range(a, b, c):
def bigger(a, b):
if a > b:
return
else:
return b
def biggest(a, b, c):
mx = bigger(bigger(a, b), c)
return mx
def smallest(a, b, c):
big = biggest(a, b, c)
small = 0
if big == a:
if b < c:
small = b
else:
small = c
if big == b:
if a < c:
small = a
else:
small = c
else:
if a < b:
small = a
else:
small = b
return small
r = biggest(a, b, c) - smallest(a, b, c)
return r
print(set_range(10, 4, 7))
print(set_range(1.1, 7.4, 18.7))
このエラーメッセージを元にGoogle先生に聞いても、「これは〜だから〜を変更すれば良い」的な直接的な回答が出てきません。
しかし、stackoverflow
にこの問題の解に通じる意味が書かれていました。
“The problem isn’t the input. Python will implicitly return None from the valid input function. And there are two different vPopSize variables here ”
どこかでreturnで上手く返っていない様なので見返しました。
と思ったら、5行目でaを書き漏れて返っていませんでした。
if a > b:
return a
else:
return b
が正しい記載です。
ちなみに、下記のコードの”return mx”を削っても
def biggest(a, b, c):
mx = bigger(bigger(a, b), c)
return mx
下記のエラーが出ます。
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
今回は簡単な抜けでしたが、このエラーが出たらreturnが上手く返っているか、を重点にチェックする様にしましょう。


コメント