Python ValidationError或TypeError、ValueError-异常

Python ValidationError或TypeError、ValueError-异常,python,django,exception,error-handling,django-validation,Python,Django,Exception,Error Handling,Django Validation,我对如何在python中捕获异常非常了解。关于捕获异常的这两种方法,我有一个问题。我只找到有关ValidationError的有用信息 但我不太明白,除了django之外,它是否还可以使用,或者我可以期望它会有什么错误消息。我看到了这个关于类型验证的代码示例 except (TypeError, ValueError) as error: LOGGER.error('Error e.g.', exc_info=True) except ValidationError:

我对如何在python中捕获异常非常了解。关于捕获异常的这两种方法,我有一个问题。我只找到有关ValidationError的有用信息

但我不太明白,除了django之外,它是否还可以使用,或者我可以期望它会有什么错误消息。我看到了这个关于类型验证的代码示例

except (TypeError, ValueError) as error:
            LOGGER.error('Error e.g.', exc_info=True)

except ValidationError:
            LOGGER.error('Error e.g', exc_info=True)
因此,对于我来说,
TypeError
ValueError
很清楚:

异常值错误

当操作或函数接收到类型正确但值不正确的参数,并且该情况未由更精确的异常(如Indexer Ror)描述时引发

异常类型错误

当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息

总之, 我试图理解第二个代码使用
ValidationError
的优点,但这可能很棘手,因为我没有找到关于它的好文档。如果有人能分享关于ValidationError的知识,我将不胜感激

我提出这个问题是因为我将使用相关的库,我没有看到异常被这样对待


谢谢社区

它们是处理不同异常的不同代码块

但是在本例中,两种情况处理每个异常的逻辑相同

如果我们将案例分为3个不同的代码块,可能更有意义:

except TypeError as error:
    LOGGER.error('Type error: ', exc_info=True);
except ValueError as error:
    LOGGER.error('Value error: ', exc_info=True);
except ValidationError error:
    LOGGER.error('Validation error: ', exc_info=True);
当使用不正确的类型时,将抛出
TypeError

使用不正确的值时将抛出
ValueError

验证失败时将抛出
ValidationError


程序将以不同方式处理每个异常

可以通过以下方式捕获Python异常:

试试看:
除:

或 像这样

试试看:
除(,):
<处理异常的代码>
您只是在一起处理多个异常。你可以 总是把他们分开。它们不是两种不同的方式。 在您的情况下,记录它的方式是一样的

以下是几个例子:

试试看:

除类型错误外:
<处理异常的代码>
除值错误外:
<处理异常的代码>
除ValidationError外:
<处理异常的代码>
除:
<处理异常的代码>
在最后一种情况下,它捕获任何类型的异常,因为没有指定任何类型。
Python程序中的可以引发任何异常。
事实上,exception只是一个特殊的类,即使您可以为库创建一个类。

因此,找到异常的最佳方法是阅读库中的文档 不是异常类

如果您的程序捕获到异常,并希望在创建日志文件时获得有关该异常的更多详细信息,则可以这样编写代码。

类型错误除外,如e:
i=str(e)
在这种情况下,您将捕获异常并将其详细信息转换为字符串。
这是Django文档中关于您正在谈论的错误的部分

表单验证发生在数据被清除时。如果你想 自定义此过程,有不同的地方可以进行更改,每个 服务于不同目的的人。有三种类型的清洁方法 在表单处理期间运行。这些通常在您调用时执行 表单上的“”是valid()方法。还有其他一些东西也可以 触发清理和验证(访问errors属性或 直接调用full_clean()),但通常不需要它们

一般来说,如果存在错误,任何清理方法都可能引发ValidationError 正在处理的数据出现问题,通过相关 提供给ValidationError构造函数的信息。请参阅下面的最佳内容 提高验证错误的实践。如果未引发ValidationError, 该方法应以Python格式返回已清理(规范化)的数据 反对

其他一些参考资料:



一些您可能不清楚的内容:
TypeError
ValueError
内置于Python中。但是库可以而且通常会定义自己的异常
ValidationError
来自您正在使用的库。要搜索异常,您应该查看库中的文档,而不是异常,因为它本身没有异常docs@Anonymous是的,我提出这个问题是因为我了解了一个新的图书馆,叫做related,为了进行验证@may OK,您只需查看文件中的异常,然后找到语句Raise validation Error,但我猜并非所有验证过程都支持此ValidationError,因为我使用的是名为related的新库,这里没有列出此类型的异常,例如。