亲测有用,忽略python运行时warnings消息输出的方法

本文介绍了一种有效屏蔽Python运行过程中产生的警告信息的方法。通过安装并使用shutup库,在代码开始处执行特定语句即可实现警告信息的屏蔽,使输出更简洁。
部署运行你感兴趣的模型镜像

问题

运行python程序的时候老是跑出来一堆warnings,但是不影响程序正常运行。
警告消息如下所示:

C:\pythons\python3.6\lib\site-packages\win32\lib\pywintypes.py:3: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp, sys, os
C:\pythons\python3.6\lib\site-packages\scipy\sparse\sparsetools.py:21: DeprecationWarning: `scipy.sparse.sparsetools` is deprecated!
scipy.sparse.sparsetools is a private module for scipy.sparse, and should not be used.
  _deprecated()

不想看见这么多,于是想屏蔽。
但是试了如下方法都没用:

import warnings
warnings.filterwarnings('ignore')
import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

解决方法

千搜万搜终于搜到了一个大神的方法:shutup的github源码
使用方法:
先安装 shutup 包:

pip install shutup

之后在代码最开头执行如下语句:
(要在import其他包之前执行!!!反正就写在最前面就完事!)

import shutup
shutup.please()

短短两行代码却有着惊天地泣鬼神的力量。
真的,我的世界寂静了。

参考

How to disable Python warnings?

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户解决在Python运行代码忽略PyTorch和CUDA相关的警告信息的问题。首先,我要回顾用户的问题和他的历史对话,确保我完全理解他的需求。 用户之前提到他在处理PyTorch的CUDA兼容性问题,现在他想在运行Python代码忽略警告,特别是与PyTorch和CUDA相关的。用户提供了几个引用,其中引用[1]和引用[2]涉及检查CUDA可用性的代码,引用[3]提到了PyTorch中的混合精度训练警告,引用[4]和引用[5]则是一些具体的代码示例,但看起来和当前问题关联不大。 首先,我需要确定用户的主要需求:在Python忽略警告,尤其是PyTorch和CUDA相关的。可能的场景是用户在使用PyTorch进行开发或训练,遇到了很多警告信息,希望这些信息不显示在控制台,以免干扰输出。 接下来,我要回忆Python中处理警告的常用方法。通常,可以使用warnings模块来过滤警告。此外,PyTorch可能有一些特定的警告,或者与CUDA相关的警告,可能需要特别的处理方式。 用户的历史对话中提到他之前遇到CUDA兼容性问题,特别是sm_86架构的支持问题。现在他可能已经解决了安装问题,但运行仍有警告,比如弃用警告或其他CUDA相关的提示。例如,在引用[3]中提到的torch.cuda.amp.autocast和GradScaler的弃用警告,用户可能在使用旧版PyTorch代码遇到这些警告,需要处理。 我需要考虑不同的方法,包括全局忽略所有警告、忽略特定类别的警告、使用环境变量控制PyTorch的日志级别,以及处理特定库的警告(如urllib3)。此外,用户可能希望在某些代码块中临忽略警告,而不是全局设置,这样可以更灵活。 还需要注意,使用warnings.filterwarnings("ignore")可能会隐藏所有警告,包括可能有用的信息,因此最好具体过滤。例如,使用category参数指定UserWarning或DeprecationWarning。对于PyTorch特定的警告,可能需要知道具体的警告类别,或者使用PyTorch提供的配置选项,如设置日志级别。 此外,用户可能在多线程或异步环境中遇到警告,这候需要确保警告过滤器在正确的线程中设置。或者,用户可能在使用某些第三方库,这些库本身触发了警告,需要单独处理。 可能的解决方案步骤包括: 1. 使用warnings模块全局忽略警告。 2. 针对特定警告类别进行过滤。 3. 配置PyTorch的日志级别以减少输出。 4. 使用上下文管理器在特定代码块中忽略警告。 5. 处理来自其他库(如urllib3)的警告。 需要检查用户提供的代码示例,比如引用[1]中的代码已经使用了warnings.filterwarnings("ignore"),但用户可能还需要更具体的配置。此外,用户可能在混合精度训练遇到弃用警告,如引用[3]中的情况,这候需要更新代码或忽略特定的弃用警告。 另外,用户可能希望同处理PyTorch和CUDA的警告,例如与CUDA初始化或驱动相关的警告,这些可能需要不同的方法。例如,设置环境变量PYTORCH_CUDA_ALLOC_CONF或调整日志级别。 最后,需要提醒用户注意,忽略所有警告可能会掩盖潜在问题,建议仅在调试后或确定警告无害使用这些方法。同,推荐用户尽可能修复警告的根源,比如更新弃用的API调用。</think>#### 分步解决方案:Python忽略PyTorch/CUDA警告的5种方法 --- ### 一、基础方法:全局忽略所有警告 在代码开头添加: ```python import warnings warnings.filterwarnings("ignore") # 全局过滤所有警告[^1] ``` 验证效果: ```python import torch print(torch.zeros(1).cuda()) # 即使CUDA存在兼容问题也不会显示警告 ``` --- ### 二、精准过滤:针对特定警告类型 ```python import warnings # 只过滤PyTorch相关警告 warnings.filterwarnings("ignore", category=UserWarning, module="torch") # 过滤CUDA相关警告 warnings.filterwarnings("ignore", category=UserWarning, message=".*CUDA.*") ``` 验证示例(针对引用[3]的弃用警告): ```python from torch.cuda.amp import autocast, GradScaler # 不会显示deprecation警告 ``` --- ### 三、PyTorch专用配置 通过设置日志等级控制输出: ```python import torch torch.set_warn_always(False) # 关闭PyTorch的强警告提示 torch._C._set_cudnn_enabled(False) # 禁用CUDNN警告(慎用) ``` --- ### 四、环境变量控制法(推荐) 在运行脚本前设置环境变量: ```bash # Linux/macOS export PYTHONWARNINGS="ignore" export CUDA_LAUNCH_BLOCKING=0 # 禁用CUDA同步错误检查 # Windows set PYTHONWARNINGS=ignore set CUDA_LAUNCH_BLOCKING=0 ``` 或在代码中设置: ```python import os os.environ["PYTHONWARNINGS"] = "ignore" os.environ["CUDA_LAUNCH_BLOCKING"] = "0" ``` --- ### 五、上下文管理器(局部控制) ```python import warnings import torch with warnings.catch_warnings(): warnings.simplefilter("ignore") # 只在此代码块内忽略警告 x = torch.tensor([1.], device="cuda") # 在此执行可能产生警告的操作 ``` --- ### 配置验证代码 ```python def check_warnings(): import torch # 触发典型警告 try: torch.autograd.profiler.profile(use_cuda=True) # 触发CUDA警告 except Exception: pass old_amp = torch.cuda.amp.autocast # 触发弃用警告 return "无警告输出" if len(warnings.filters) > 0 else "配置失败" print(check_warnings()) ``` --- ### 最佳实践建议 1. **优先使用精准过滤**:避免隐藏关键错误信息 2. **组合使用环境变量与代码控制**:`os.environ + warnings.filterwarnings` 3. **处理特定第三方库警告**(如urllib3): ```python warnings.filterwarnings("ignore", category=ResourceWarning, module="urllib3") ``` --- ### 进阶调试技巧 ```python # 查看当前生效的警告过滤器 print(warnings.filters) # 临恢复警告显示 with warnings.catch_warnings(): warnings.simplefilter("default") # 恢复默认行为 # 执行需要检查警告的代码 ``` --- ### 技术原理 Python警告系统基于`warnings`模块实现,其过滤规则遵循: $$ \text{过滤等级} \times (\text{模块匹配} + \text{消息正则匹配}) $$ PyTorch的CUDA警告主要通过`torch._C._log_api_usage_once`生成,部分核心警告使用C++层直接输出[^3]。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值