python - 如何忽略某些警告,而其他警告则从 Python 命令行转向异常?

标签 python exception warnings command-line-arguments

如何从命令行执行Python并忽略某些警告(例如 DeprecationWarning ),同时将其余警告转为异常?

可以-W多次使用选项来执行此操作?

我面临的具体问题是我正在运行 pytest/pytest-cov tox里面/virtualenv因为 virtualenv uses an outdated site.py module ,一个DeprecationWarning当我用 -Werror 运行时抛出在我获得代码访问权限以捕获它之前。我想通过至少忽略此警告来最大程度地减少对测试的影响,并将其他警告( ImportWarning 等)转换为异常,以便我可以在自己的代码中检测和处理这些警告。

最佳答案

手册页确实有这方面的信息,但是有点难以阅读。在发布问题之前我找不到这个问题,所以我会看看是否可以使它更容易找到:

陷阱:-W 选项被后面的选项屏蔽,-Werror 需要出现在之前 -Wignore


按异常(exception)过滤:

python -werror -Wignore::PendingDeprecationWarning your_stuff.py

按行过滤:

python -Werror -Wignore::::32 your_stuff.py

忽略第 32 行的警告


按模块/文件过滤:

python -Werror -Wignore:::site: your_stuff.py

忽略示例中来自 site.py 模块的任何警告(异常回溯中的最后一个文件)


选项为action:message:category:module:line


手册页:

   -W argument
          Warning control.  Python sometimes prints warning message to sys.stderr.  A typical warning  message
          has  the following form: file:line: category: message.  By default, each warning is printed once for
          each source line where it occurs.  This option controls how often warnings are printed.  Multiple -W
          options  may be given; when a warning matches more than one option, the action for the last matching
          option is performed.  Invalid -W options are ignored (a warning message  is  printed  about  invalid
          options  when  the  first  warning is issued).  Warnings can also be controlled from within a Python
          program using the warnings module.

          The simplest form of argument is one of the following action strings  (or  a  unique  abbreviation):
          ignore  to  ignore  all  warnings; default to explicitly request the default behavior (printing each
          warning once per source line); all to print a warning each time it occurs (this  may  generate  many
          messages if a warning is triggered repeatedly for the same source line, such as inside a loop); modâ€
          ule to print each warning only the first time it occurs in each module; once to print  each  warning
          only  the  first time it occurs in the program; or error to raise an exception instead of printing a
          warning message.

          The full form of argument is action:message:category:module:line.   Here,  action  is  as  explained
          above  but only applies to messages that match the remaining fields.  Empty fields match all values;
          trailing empty fields may be omitted.  The message field matches the start of  the  warning  message
          printed;  this  match  is  case-insensitive.  The category field matches the warning category.  This
          must be a class name; the match test whether the actual warning category of the message  is  a  subâ€
          class  of  the  specified  warning  category.   The full class name must be given.  The module field
          matches the (fully-qualified) module name; this match is case-sensitive.  The line field matches the
          line number, where zero matches all line numbers and is thus equivalent to an omitted line number.

关于python - 如何忽略某些警告,而其他警告则从 Python 命令行转向异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36140169/

相关文章:

python - 频繁连接时与 MySQL 服务器在 'reading initial communication packet' 处失去连接

Python One-hot 对文本中的每 2 个字符进行编码

java - "type X[][] should explicitly be cast to Object[][] for the invocation of the varargs"

java - 我收到错误 : "exception FileNotFoundException is never thrown in body of corresponding try statement" and cannot figure out why

python - NotAllowedError create_login_url

PHP CLI 通过 php.ini 抑制警告

python - numpy 除法与 RuntimeWarning : invalid value encountered in double_scalars

python - 了解 mxnet.image.ImageDetIter

python - 将列表中的字典键从 unicode 编码为 ascii

java - 如果以下代码中发生错误,如何关闭 Excel 文件而不崩溃