python可重用用户错误处理

python可重用用户错误处理,python,error-handling,functional-programming,user-defined,Python,Error Handling,Functional Programming,User Defined,我一直在玩弄如何使用错误处理。尤其是用户定义的错误 然而,我不确定以下方法是否是一个坏主意/推荐/明显怪异 import operator from functools import partial class GenericError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) de

我一直在玩弄如何使用错误处理。尤其是用户定义的错误

然而,我不确定以下方法是否是一个坏主意/推荐/明显怪异

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'

我的想法是,通过这种方式,我可以有一个简单的模块,我可以重复使用,并通过管道传递值,而无需向我编写的任何新函数添加用户定义的错误。我以为这会让事情更干净

你为一些简单明了的事情增加了很多开销。别忘了:

简单总比复杂好

为什么不简单地:

if 5 != 6:
   raise ValueError('oops, 5 is not equal to 6')

我一直在想,通过这种方式,我可以传递函数的返回值,单独控制错误,而不会以过度尝试而告终:除了块。引发的错误可能是为了退出程序,或者只是为了说明发生了什么。错误应该总是异常的,所以我看不出它们可能传输什么返回值。如果您只是想记录一些东西,那么就使用模块。我的意思是,如果没有错误,则返回(已测试的)值,当它失败时,错误将传递给
errorhandle
函数,它可能会包含一个处理特定错误的字典。您希望多久需要一次这个特定的构造?此外,泛型函数如何处理错误?正确的错误处理程序可能是本地代码(即忽略错误,或者以某种方式获得更好的值,或者禁用某个功能),或者调用堆栈中的某个人(即中止大型操作、显示错误消息、忽略错误),其频率可能不如开销所带来的频率高!我只是觉得这很有趣,并且想知道使用这种方法是否有好处。