と呼ばれた場所で同じ例外の区別、私はこの(簡体字)のように見える避けられない状況があります。 :それは
しかし、y
で発生するTypeErrorと、それに何も含まれていないか、あまりにも多すぎる(したがって、十分な引数がないか、あまりにも多い)/ kwargs
悪いかfoo == bar
ので。
実際の設定では、2つ以上呼び出すことができ、より多くの機能がありますが、それらにオープンコードを持っていないすべてが。
本当にありがとうございました!
と呼ばれた場所で同じ例外の区別、私はこの(簡体字)のように見える避けられない状況があります。 :それは
しかし、y
で発生するTypeErrorと、それに何も含まれていないか、あまりにも多すぎる(したがって、十分な引数がないか、あまりにも多い)/ kwargs
悪いかfoo == bar
ので。
実際の設定では、2つ以上呼び出すことができ、より多くの機能がありますが、それらにオープンコードを持っていないすべてが。
本当にありがとうございました!
マットBillensteinさんのコメントをMorrowの答えはこれを行う正しい方法です。しかし、代わりに、いくつかの奇妙な理由でそれをすることさえできない場合は、inspect
モジュールを見ることもできます。
try: ugly()
except TypeError as e:
stack = inspect.stack()
[...look at the stack...]
Info about the inspect module.
は "ラッピング" の問題について詳しく説明するには:あなたは関数がFUNCTION_TO_CALL
に割り当てされるために利用可能であるかを制御することが仮定し、これがfooを意味y_better
def y_better(foo, bar=None):
try: y(foo, bar)
except TypeError:
if foo == bar: # detect foobar condition
raise FoobarError()
else: # not foobar, so re-raise the exception
raise
作成==バーは2回テストされていますが、制限があるため、より良い方法はありません。
あなたはいつもあなた自身の例外を作ることができますTypeErrorを継承し、個別に使用します。
class TooManyArgumentsError(TypeError):
pass
class EqualityError(TypeError):
pass
は、カスタム例外を定義します。
クラスyTypeError(TypeError例外): パス
は、(Yでこれを上げる)とYのみで()キース上
いいえ、私は 'TypeError'を発生させる関数は修正できないコードで書かれています。 –
しかし、ありがとうとスタックオーバーフローへようこそ! –
変更できない関数をラップし、TypeErrorをキャッチして別の例外を発生させます... –