0

エラー処理を使って遊んでいます。特にユーザー定義エラーの場合。

ただし、次のアプローチが悪い考え/推奨/単純な奇妙であるかどうかはわかりませんか?

import operator
from functools import partial


class GenericError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)


def errorhandle(error, func):
    print(func.__name__, "says: ", error)
# or perhaps error_dictionary[error]


def f_test_bool(x, bo, y, et, m, ef):
    """ generic boolean test. If boolean_operator(x,y) == True -->  raise passed in Error """
    try: 
        if bo(x,y):
            raise et(m)
        else:
            return x
    except et as err:
        ef(err, f_test_bool)



partial_ne = partial(f_test_bool, 
                     bo=operator.__ne__, 
                     et=GenericError, 
                     ef=errorhandle)

partial_ne( x = 5, 
            y = 6, 
            m = "oops, 5 is not equal to 6" )




>>> imp.reload(errorhandling)
f_test_bool says:  'oops, 5 is not eqal to 6'

私の考えでは、このようにして、再利用できる単純なモジュールを作成し、作成した新しい関数にユーザー定義のエラーを追加することなく値をパイプすることができると考えました。これで清潔に​​保てると思いました。

4

1 に答える 1

1

シンプルで明白であるべき何かのために、多くのオーバーヘッドを追加しています。を忘れないでください:

シンプルは複雑よりも優れています。

なぜ単純ではないのですか:

if 5 != 6:
   raise ValueError('oops, 5 is not equal to 6')
于 2012-07-11T20:53:56.517 に答える