我正在研究验证函数。我知道异常用于错误和意外情况,但在验证函数的情况下,如果内部不满足条件,我希望它返回 False 而不是异常。
问题是,在验证完成后,我需要弹出一个消息窗口,其中包含如下消息:“工具退出,因为 X 条件不满足”。我的工作流程是返回包含结果和消息的元组:
(True, Y_message)
或者 (错误,X_condition_not_met)
然后:
a, b = result
if not a:
raise_window(message=b)
但是最近我偶然发现了多个答案,引发了关于这个问题的争议,我很困惑。例如有人说总是有异常(exception):What's the best way to return multiple values from a function in Python?和其他人说元组是要走的路Best practice in python for return value on error vs. success .
如果有人能指出正确的方向,我将不胜感激。
请您参考如下方法:
验证时,函数的目的是告诉您是否满足标准。您希望得到一个 bool 结果; 有效 或无效。如果不支持函数的输入,或者不满足验证过程本身的某些依赖性,您只会抛出错误。在这种情况下,验证器的正常操作无法完成,在这种情况下您不能返回有效或无效,因为验证器无法做出该决定.
您可以将其与 isinstance() 进行比较或 issubclass() ;这两个函数针对另一个值测试一个值。它们返回 True 或 False,并在您向它们提供不受支持的输入时引发异常:
>>> isinstance(1, int)
True
>>> isinstance(1, 'foobar')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
正常操作是验证,给它不支持的输入意味着没有有效或无效值可以返回,因此保证异常。
因此,对于返回 (True, message) 或 (False, message) 元组的验证器,我只会在出现以下情况时引发异常验证过程本身的问题,而不是指示 (False, message) 情况。
请注意,验证器返回什么并不重要;如果您需要同时返回一个有效/无效 标志和相应的消息(并且只有验证器可以生成该消息),那么返回一个元组就可以了。
你也可以返回一个自定义类:
class ValidationResult(object):
def __init__(self, result, message=''):
self.result = bool(result)
self.message = message
def __nonzero__(self): # Python 2
return self.result
__bool__ = __nonzero__ # Python 3
def __str__(self):
return self.message
然后用它作为测试:
valid = validation(value)
if not valid:
raise_window(message=str(valid))
