2016-12-20 19 views
4

私は、不必要に特定の例外を発生させるpythonライブラリを制御できません。Pythonで例外を "解除"する方法はありますか?

「プラシーボ」例外サブクラスでそれを処理する方法はありますか?すなわち

class MyException(Exception): 
    def __init__(self, value): 
     # literally do nothing. return to program flow 
     pass 
+3

あなただけの例外をキャッチしたいですか?初期化子( 'raise'を元に戻すのではなく、例外として値にしか影響しません)を変更することで、例外がスローされるのを防ぐことはできません。 –

+2

特定の例外があるので、 'try-except'ブロックのexcept節に例外クラスを指定することで例外を処理できます。 –

+0

できます。私はすべての呼び出しをラップし、例外クラスまたは何かを再定義しないことを望んでいました。私は "raiseを元に戻したい" – Jared

答えて

5

特定例外

あなたは特定例外を持っている、あなたはtry-exceptブロックの除く句で例外クラスを指定することにより、例外を処理する必要があり上げます。

プラセボアプローチ(すなわちexcept Exception...)唯一の例外は、通常Exceptionから派生するので、他の例外を黙らしようとしているか明らかに導出されていない発生した例外ので、(新しい例外クラスで)すべてで仕事をするつもりはありません新しい例外クラスから取得します。


ベア心​​の中で:明示的

あなたなしアンドゥ発生した例外する理由だから私は表示されませんが沈黙しない限り、

エラーが黙って渡すことはありませんtry-except。例外は何のために提起されませんでした。


あなたはこのライブラリから関数が呼び出されるたびにtry-exceptの使用を避けることを望んでいるなら、あなたはtry-exceptで呼び出しをラップラッパー関数を書くことができ、その後、今後新しい機能を使用します。

from somelib import func 
from somelib import SomeException 


def wrapper_func(*args, **kwargs): 
    try: 
     func(*args, **kwargs) 
    except SomeException: 
     pass 
+0

例外を除いて、これと異なる動作をします。上記を使用して、raise例外の後の行は*実行されません*。 – Jared

+0

@ Jared例外が最初に存在した理由を邪魔しているようです。どのようにして* ZeroDivisionErrorを元に戻す*でしょうか? –

0

他の答えが正しいですが、あなたは、いくつかの奇妙な/バギーモジュールを扱っている場合は、あなたが与えることができますfuckitpyしてみてください!

一般に、例外を静かに通過させることは非常に悪い考えです。

とにかく、fuckitpyを使用するための基本的な方法は、(ドキュメントから引用)である。また、

import fuckit 
#import some_shitty_module 
fuckit('some_shitty_module') 
some_shitty_module.some_function() 

ドキュメントから:

はまだエラーを取得?チェーンfuckitコール。このモジュールは暴力のようなものです。うまくいかない場合は、それ以上のものが必要です。

import fuckit 
fuckit(fuckit('some_shitty_module')) 
# This is definitely going to run now. 
some_shitty_module.some_function() 

fuckitpy (GitHub)https://github.com/ajalt/fuckitpy

関連する問題