Django:尝试捕获ValidationErrors并以布尔值返回结果

时间:2020-07-21 09:59:34

标签: django

我不明白为什么这个try / except无法正常工作。

我有一个验证方法,该方法可能会引发一个ValidationError(几种)之一。但是,在另一种重命名架构的方法中,我希望捕获所有这些错误,而只使用一条通用消息。

验证方法(为简便起见进行编辑):

def validate_tenant_schema_name(tenant, value):
    if {some invalid condition in schema name}:
        raise ValidationError('Schema name may not be blank.')

    if {some other invalid condition in schema name}:
        raise ValidationError('Schema name may not begin or end with an underscore.')

    if {yet another invalid condition in schema name}:
        raise ValidationError('Schema name must have 2 to 30 characters.')

    return name

我的验证“包装器”方法:

def is_valid_schema_name(name):
    try:
        _ = validate_tenant_schema_name(None, name)
        return True
    except ValidationError:        # Debug got here
        return False               # but didn't get here

我的schema_rename方法:

def schema_rename(tenant, new_schema_name):
    if schema_exists(new_schema_name):
        raise ValidationError("New schema name already exists")
    if not is_valid_schema_name(new_schema_name):
        raise ValidationError("Invalid string used for the schema name.")
    ...run the sql to rename the schema...
    tenant.save()

在调试中逐步进行调试时,它到达了except方法中的is_valid,但是没有到达return False-正如{中的注释所指出的{1}}方法。它只是返回到调用方法。

我还在调试器中评估了表达式is_valid。如果我给它一个有效的架构名称,它将返回is_valid_schema_name(new_schema_name)。如果我给它一个无效的名称,它将返回True

我还尝试了此版本的Nonetype方法,以为也许仍在异常处理程序中返回False可能会使它搞砸了,但是我得到了相同的结果。

is_valid

有人可以阐明这个问题吗?

0 个答案:

没有答案