2012-01-26 10 views
0

tryexceptを使用して、実際にパラメータを上げずに例外が発生する場合、パラメータをテストするにはどうすればよいですか?引数が無効です

class MyClass: 
    def function(parameter): 
     pass 

parameter例えば、任意の例外の1以上を上げることができるあいまい関数である:

parameter = pow("5", 5) 

TypeErrorは、すぐ関数が呼び出されると機能前に実行することができるように上昇させますステートメント。

+0

try ... exceptを使用してみませんか?好奇心のためだけに、あるいは何か他の理由がありますか? –

+0

申し訳ありませんが不明な場合は、 'try'と' except'を使いたいですが、パラメータでどのように動作するのか分かりません。 –

+0

パラメータの値は、関数の実装方法によって異なります。あなたの例では、 'parameter'が' function'の中でどのように例外を送出するのか分かりません。 –

答えて

0

を:parameterは別の関数であり、例えば取ります:parameter = pow("5", 5)これはTypeErrorを発生させますが、それはどんなタイプの関数でも、どんなタイプの例外でもあります。

def function(callable, args=()): 
    try: 
     callable(*args) 
    except: 
     print('Ops!') 

例:

​​

あなたが関数内exeptionをキャッチしたい場合は

あなたはその関数内で(私が呼び出し可能であると仮定しています)paramenterを呼び出す必要がありますこれは、関数内であなたの "パラメタ"を実際に呼び出す必要がある場合です。それは二つの異なる呼び出しを分離することをお勧めですので、例外はpowないfunctionある高めるために、この例では

>>> try: 
...  param = pow('5', 5) 
... except: 
...  param = 10 
... 
>>> param 
10 
>>> function(param) 

、としてラップ:そうでなければ、あなたはおそらくのようなもので、外の行動を管理する必要がありますtry-exceptは、失敗する可能性があるコードを示します。

+0

'parameter'が単なるパラメータを持たない関数であった場合はどうなりますか? –

+0

@ChristopherM: 'parameter'が引数を必要としない関数であれば、デフォルトで' args =() 'によって' function(parameter) 'を呼び出すだけです。 –

+0

ありがとう、私は今理解しています。 –

0

パラメータが特定のタイプであることが予想される場合は、type(paramter) is parametertypeを使用できます。あなたは「i」はint型であることを確認したい場合例えば

、編集することによって実行指示if(type(i) is int):

try: 
    pow("5",5) 
    return 0 
except Exception, err: 
    sys.stderr.write('ERROR: %s\n' % str(err)) 
    return 1 
+0

私は 'parameter'によって引き起こされた例外の数を実際に発生させずに数えることができる必要があります。 –

+0

パラメータはどのようなタイプですか?それとも、パラメータではなく、エラー投げをテストする関数ですか? – Zyerah

+0

関数の先頭に 'if(type(parameter)int)'を置き、正しい型でなければ返すと、問題は解決されます。もし私が問題を理解していれば。 – Zyerah

1

私が理解できるものから、あなたが発生した例外を処理しますさらに検査のためにどのようなエラーが発生しているかを調べます。それをやり遂げる一つの方法があります。

class Foo(object): 
    def find_errors(arg): 
     errors = [] 
     try: 
      # do something 
     except TypeError as e: 
      errors.append(e) 
      # handle exception somehow 
     except ValueError as e: 
      errors.append(e) 
      # handle exception somehow 
     # and so on ... 
     finally: 
      pass #something here 

     return errors, ans 

今、あなたはerrorsを検査し、例外が提起されているかを調べることができます。

0

おそらく無効な関数呼び出しによって発生したTypeErrorの例外をキャッチする方法がありますか?このよう

:あなたがいないdef foo(bar):ラインで確か機能でそれらをキャッチしていない

def foo(bar): 
    pass 

foo(1, 2) 

それはあなたが例外をキャッチところそれはですので、エラーをした機能の呼び出し側です:あなたが言った別の答えにコメントで

try: 
    foo(1, 2) 
except TypeError: 
    print('call failed')