0

そのため、再帰呼び出しを行っている行でこのエラーが発生しています。エラーが発生した行は次のようになります。return some_func(x) - .2

TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'

、および他のトリックを試しreturn some_func(x) - .2 and x not None and float(x) is Trueましたが、これまでのところ成功していません。

ありがとう!

4

3 に答える 3

3

some_func(x)が返さNoneれ、浮動小数を減算することはできません —Noneそれは意味がありません。必要に応じて、 ( の実装を変更することにより)some_func(x)決して戻らないようにするか、次のようにすることができます。Nonesome_func

y = some_func(x)
if y is not None:
    return y - .2
else:
    return None

Python の関数は暗黙的に を返すため、最後の 2 行は省略できますNone

于 2012-10-14T13:30:48.047 に答える
0

コードを表示しないと、エラー メッセージは、ある時点で関数が をsome_func(x)返すことを暗示しているようNoneです。メッセージが示すように、Noneと の間の減算演算floatは Python では実行できません。

関数をトレースして、常に数値を返し、その問題が発生しないことを確認します。または、コードを変更して (@daknok で示されているように) の戻り値を確認し、そのNone方法で問題を回避します。ただし、ソース IMO で問題を回避することをお勧めします。

以下の @burhan Kahlid による優れたコメントにも注意してください。

于 2012-10-14T13:29:25.190 に答える
0

あなたの修正

return some_func(x) - .2 and x not None and float(x) is True

少なくとも 3 つの理由で機能しません。

  1. Python はands を遅延評価します。

    つまり、 が最初にA and B評価され、次にが true の場合は が評価されます。あなたの場合、評価すると例外が発生するため、に到達することさえありません。AABAB

  2. none でないことのチェックはx is not None、 notx not Noneです。

  3. 問題は でsome_func(x)ありNone、 ではないということxですNone。後者のチェックは無関係です。


とにかく、解決策は、 である可能性のある値から float を減算しないことNoneです。これを行う最善の方法は、 が をsome_func返さないことを保証することです。これはNone、そのコードを変更することで実行できます。次善の策は、次のように実行できる戻り値を確認することです。

output = some_func(x)
if output is not None:
    return output - 0.2

ちなみに、関数が何も返さない場合は、暗黙的に を返すと見なされることに注意してくださいNone。したがって、上記のコードは、実行されたNone場合に返されsome_funcます。これが問題の原因である可能性もあります。

于 2012-10-14T13:50:55.263 に答える