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'
내 생각은 이런 식으로, 나는 내가 쓰기 새로운 기능에 대한 사용자 정의 오류를 추가 할 필요없이 값을 통해 재 사용 및 파이프 할 수있는 간단한 모듈이 수 있었다. 나는 이것이 물건을 더 청결하게 유지할 것이라고 생각했다.
내가 이런 식으로 내가 통해 함수의 반환 값을 전달 별도로 오류를 제어하고 과도한 시도로 끝날 수 없다는 생각을했다 : 블록을 제외하고. 제기 된 오류는 프로그램을 종료하거나 단순히 발생한 일을 언급하는 것일 수 있습니다. – beoliver
오류는 항상 예외적이어야하므로 반환 할 수있는 반환 값이 표시되지 않습니다. 로그 만 남기고 싶다면, ['logging'] (http://docs.python.org/library/logging.html) 모듈을 사용하십시오. – phihag
오류가 없다면 (테스트 된) 값이 반환되고, 실패하면 오류가 errorhandle 함수에 전달되며,이 함수는 특정 오류를 처리하기위한 사전을 포함 할 것입니다. – beoliver