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が上手く返っているか、を重点にチェックする様にしましょう。
コメント