2017-01-14 5 views
1

数値的に有効だが、物理的に範囲外の関数はどうすればよいですか?Pythonの関数引数の範囲を調べる

なぜなら、物理的に正しい範囲が残っていれば私の教え方は教えてやりたいと思います。

このエラー処理でValueError例外を使用することを考えました。

例:

def return_approximation(T): 
    #return T only if it is inbetween 0 < T < 100 
    return T 
+0

Tが0未満またはそれ以上の場合はカスタム例外を発生させます漢100? –

+2

どうすれば助けますか? –

+0

「物理的に範囲外」と「数値的に有効」とはどういう意味ですか?いくつかの例を提供し、さらに具体的にする。 –

答えて

4

Pythonは、引数の制約この種類のassert -statementを持っています。

def return_approximation(T): 
    assert 0 < T < 100, "Argument 'T' out of range" 
    return T 
+0

synatxを伴うassertステートメント:' assert Expression [、Arguments] 'は、式が失敗し、AssertionErrorで引数を使用するとAssertionErrorを発生させます。アサーションは、正しい設定の後に 'python -O my_prog.py'を使って切り替えることができます。 – marou

0

physicallyの意味についてはわかりません。

一般に、範囲外のエラーが外部データによって発生している場合は、例外を発生させることになっています。自分のデータからエラーが発生した場合は、assertを使用して現在の実行を中止することができます。

+0

物理的に正しい(関数のコンテキストで)関数intputと数値的に正しい(エラーを生成しない)入力を区別したいと思います。 – marou

+0

@marou:@mkieverで説明されているように 'assert'が行く方法です。 – hpwsue

0

それはそうのように、他のあなたの条件return Noneと一致した場合には、単に、Tに返される値を制限することができます。

>>> def f(T): 
     return T if 0 < T < 100 else None 

>>> f(100) 
>>> f(99) 
99 
>>> f(0) 
>>> f(1) 
1 

EDIT:例外を除いて、解決策:

>>> def f(T): 
     if 0 < T < 100: 
      return T 
     else: 
      raise ValueError 


>>> f(100) 
Traceback (most recent call last): 
    File "<pyshell#475>", line 1, in <module> 
    f(100) 
    File "<pyshell#474>", line 5, in f 
    raise ValueError 
ValueError 
>>> f(99) 
99 
>>> f(0) 
Traceback (most recent call last): 
    File "<pyshell#477>", line 1, in <module> 
    f(0) 
    File "<pyshell#474>", line 5, in f 
    raise ValueError 
ValueError 
>>> f(1) 
1 

あなたがしても出力することができます

>>> def f(T): 
     if 0 < T < 100: 
      return T 
     else: 
      raise Exception('T is out of Range') 

>>> f(100) 
Traceback (most recent call last): 
    File "<pyshell#484>", line 1, in <module> 
    f(100) 
    File "<pyshell#483>", line 5, in f 
    raise Exception('T is out of Range') 
Exception: T is out of Range 
+0

この場合、「なし」の使用方法を詳しく説明できますか。たとえば、プログラムの予想される動作。 – marou

+1

*特殊な意味を示すためにNoneを返す関数は、Noneやその他の値(空文字列など)がすべて条件式のFalseに評価されるため、エラーが発生しやすい* 。しかし、この特殊なケースでは、Noneは何の問題も引き起こさないようです。 – tarashypka

+0

@tarashypka、正しいが、それはアプリケーションに依存する、それは次のステップを決定するための戻り条件として使用することができる、私はOPの要件についてテストするために何かを返すか例外を提起するかどうかはっきりしていなかったそれについても何かを追加しようとしています。 –

関連する問題