对于如何在python中捕获异常,我是一个新手。我对这两种捕获异常的方式有疑问。我仅找到有关here
的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
很清楚:
异常ValueError
当操作或函数接收到类型正确但值不合适的参数时引发,并且这种情况没有通过诸如IndexError之类的更精确的异常来描述。
例外TypeError
在将操作或功能应用于不合适类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息。
总结,
我试图了解使用ValidationError
编写第二个代码的优势,但是由于找不到很好的文档,这可能很棘手。如果有人可以分享有关ValidationError的知识,我将不胜感激,
我之所以提出这个问题,是因为我要使用相关的库,而且还没有看到这样的异常。
https://pypi.org/project/related/
谢谢社区!
答案 0 :(得分:1)
它们是用于处理不同异常的不同代码块。
但是在此示例中,两种情况在处理每种异常方面都有相同的逻辑。
如果将案例分成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
程序将以不同的方式处理每个异常
答案 1 :(得分:1)
Python异常可以通过以下方式捕获:
try:
<your code>
except <Exception>:
<CODE 2>
或 像这样
try:
<your code>
except(<exception1>,<exception2>):
<Code to handle exception>
您只是一起处理多个异常。您可以 总是分开。它们不是2种不同的方式。 在您的情况下,按原样记录它。
以下是一些示例:
try:
<code>
except TypeError:
<Code for handling exception>
except ValueError:
<Code for handling exception>
except ValidationError:
<Code for handling exception>
except:
<Code for handling exception>
在最后一种情况下,由于未指定任何类型,因此它会捕获任何类型的异常。
在python中,程序可以引发任何异常。
实际上,例外只是一个特殊的类,即使您可以为自己的库创建一个类。
因此查找异常的最佳方法是阅读库的文档 不是异常类。
如果您的程序捕获到异常,并且想要有关创建日志文件的更多详细信息,则可以这样编写代码。
except TypeError as e:
i=str(e)
在这种情况下,您将捕获异常并将其详细信息转换为字符串。
这是来自django文档中有关您正在谈论的错误的信息。
清理数据时进行表单验证。如果你想 自定义此过程,有很多地方可以进行更改,每个地方 一个服务于不同的目的。三种清洁方法是 在表单处理期间运行。这些通常在您致电时执行 表单上的is_valid()方法。还有其他事情也可以 触发清理和验证(访问errors属性或 直接调用full_clean()),但通常不需要。
通常,任何清洗方法都可以引发ValidationError(如果存在) 正在处理的数据出现问题,并通过相关 信息传递给ValidationError构造函数。请参阅以下最佳内容 提高ValidationError的实践。如果没有引发ValidationError, 该方法应以Python的形式返回已清理(规范化)的数据 对象。
希望这会有所帮助
The link to docs
This link has info about other common builtin exception classes.
如果此答案解决了您的问题,则可以单击对勾。