捕获一个 MySql 警告

2021-11-20 00:00:00 python mysql

在我的 python 脚本中,我想在使用 MySql 的查询期间捕获为列 'xxx' 截断的数据"警告.

In my python script I would like to trap a "Data truncated for column 'xxx'" warning durnig my query using MySql.

我看到一些帖子建议使用下面的代码,但它不起作用.

I saw some posts suggesting the code below, but it doesn' work.

您是否知道在使用此代码之前是否必须导入某些特定模块或者是否应该调用某些选项/标志?

Do you know if some specific module must be imported or if some option/flag should be called before using this code?

谢谢大家

阿夫格

import MySQLdb
try:
    cursor.execute(some_statement)
    # code steps always here: No Warning is trapped
    # by the code below
except MySQLdb.Warning, e:
    # handle warnings, if the cursor you're using raises them
except Warning, e:
    # handle warnings, if the cursor you're using raises them

推荐答案

警告就是:警告.他们被报告给(通常)stderr,但没有做任何其他事情.你不能像异常一样捕捉它们,因为它们没有被引发.

Warnings are just that: warnings. They get reported to (usually) stderr, but nothing else is done. You can't catch them like exceptions because they aren't being raised.

但是,您可以使用 warnings 模块配置警告时要做什么,并关闭它们或将它们变成异常.例如, warnings.filterwarnings('error', category=MySQLdb.Warning)MySQLdb.Warning 警告 转换为异常(在这种情况下,它们将被使用您的 try/except) 或 'ignore' 根本不显示它们.您可以(并且可能应该)拥有比类别更细粒度的过滤器.

You can, however, configure what to do with warnings, and turn them off or turn them into exceptions, using the warnings module. For instance, warnings.filterwarnings('error', category=MySQLdb.Warning) to turn MySQLdb.Warning warnings into exceptions (in which case they would be caught using your try/except) or 'ignore' to not show them at all. You can (and probably should) have more fine-grained filters than just the category.

相关文章