我不明白为什么这个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
有人可以阐明这个问题吗?