Skip to main content
 首页 » 编程设计

python之验证和异常与错误消息元组

2025年05月04日15TianFang

我正在研究验证函数。我知道异常用于错误和意外情况,但在验证函数的情况下,如果内部不满足条件,我希望它返回 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))