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' 

내 생각은 이런 식으로, 나는 내가 쓰기 새로운 기능에 대한 사용자 정의 오류를 추가 할 필요없이 값을 통해 재 사용 및 파이프 할 수있는 간단한 모듈이 수 있었다. 나는 이것이 물건을 더 청결하게 유지할 것이라고 생각했다.

답변

1

간단하고 명확해야 할 부분에 많은 오버 헤드가 추가됩니다. zen을 잊지 마세요 :

단순함이 복잡한 것보다 낫습니다.

이유는 단순히 :

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

내가 이런 식으로 내가 통해 함수의 반환 값을 전달 별도로 오류를 제어하고 과도한 시도로 끝날 수 없다는 생각을했다 : 블록을 제외하고. 제기 된 오류는 프로그램을 종료하거나 단순히 발생한 일을 언급하는 것일 수 있습니다. – beoliver

+0

오류는 항상 예외적이어야하므로 반환 할 수있는 반환 값이 표시되지 않습니다. 로그 만 남기고 싶다면, ['logging'] (http://docs.python.org/library/logging.html) 모듈을 사용하십시오. – phihag

+0

오류가 없다면 (테스트 된) 값이 반환되고, 실패하면 오류가 errorhandle 함수에 전달되며,이 함수는 특정 오류를 처리하기위한 사전을 포함 할 것입니다. – beoliver