Skip to content

How to Disable Python Warnings

How to suppress Python warnings using code, command-line options, or environment variables, with examples for specific warning categories, modules, or entire scripts.

Python warnings are non-fatal messages that alert you to potential issues in your code such as deprecated features, risky type conversions, or misconfigured environments. Unlike exceptions, warnings don't stop your program from running, but they can clutter your output and obscure the information you actually need.

Whether you're running a production script, executing third-party code, or simply want cleaner console output during development, there are times when suppressing warnings makes sense. This guide covers every major method to disable Python warnings (in code, from the command line, and through environment variables) with clear examples and best practices.

When Should You Disable Warnings?

Before suppressing warnings, it's important to understand why they appear. Warnings exist to help you:

  • Identify deprecated functions that may be removed in future Python versions.
  • Spot potential bugs, such as invalid escape sequences or resource leaks.
  • Notice configuration issues, like missing paths or incompatible library versions.

Method 1: Disable All Warnings in Code with warnings.filterwarnings()

Python's built-in warnings module lets you control which warnings are shown. The simplest way to suppress all warnings globally is with warnings.filterwarnings('ignore').

import warnings

warnings.filterwarnings('ignore')

warnings.warn("This is a test warning")
print("Script executed successfully.")

Output:

Script executed successfully.

Method 2: Suppress Warnings in a Specific Code Block

Blanket suppression is often too aggressive. If you only want to hide warnings in a specific section of your code while keeping them active everywhere else, use the warnings.catch_warnings() context manager:

import warnings

print("Step 1: Warnings are active here")
warnings.warn("This warning WILL appear")

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    print("Step 2: Warnings are suppressed here")
    warnings.warn("This warning will NOT appear")

print("Step 3: Warnings are active again")
warnings.warn("This warning WILL also appear")

Output:

Step 1: Warnings are active here
/script.py:4: UserWarning: This warning WILL appear
  warnings.warn("This warning WILL appear")
Step 2: Warnings are suppressed here
Step 3: Warnings are active again
/script.py:11: UserWarning: This warning WILL also appear
  warnings.warn("This warning WILL also appear")

The context manager temporarily changes the warning filter. Once the with block ends, the original filter settings are automatically restored.

Method 3: Suppress Only a Specific Warning Category

Rather than silencing everything, you can target a specific category of warning. Python has several built-in warning categories:

Category Description
DeprecationWarning Features that will be removed in future versions
FutureWarning Changes in behavior in future versions
UserWarning Default category for warnings.warn()
RuntimeWarning Suspicious runtime behavior
SyntaxWarning Dubious syntax
ResourceWarning Resource usage issues

Example: Suppress Only DeprecationWarning

import warnings

warnings.filterwarnings('ignore', category=DeprecationWarning)

warnings.warn("Old feature used", DeprecationWarning)

warnings.warn("Something might be wrong", UserWarning)

Output:

/script.py:8: UserWarning: Something might be wrong
  warnings.warn("Something might be wrong", UserWarning)

Only the DeprecationWarning is suppressed, all other warning types continue to display normally.

Example: Suppress Warnings from a Specific Module

You can also filter warnings by the module that generates them using the module parameter with a regex pattern:

import warnings

warnings.filterwarnings('ignore', module='requests.*')

This is particularly useful when a third-party library produces warnings you can't control.

Method 4: Disable Warnings via the Command Line

If you don't want to modify any code, you can suppress warnings when running a script by using the -W flag:

python -W ignore your_script.py

Example

Given a script called test.py:

test.pypython
import warnings

warnings.warn("This is a test warning")
print("Script completed.")

Running normally:

$ python test.py
test.py:3: UserWarning: This is a test warning
  warnings.warn("This is a test warning")
Script completed.

Running with -W ignore:

$ python -W ignore test.py
Script completed.

The warning is completely suppressed without changing a single line of code.

Suppress Only Specific Categories from the Command Line

The -W flag also accepts more specific filters:

python -W "ignore::DeprecationWarning" your_script.py

python -W "ignore::UserWarning:module_name" your_script.py

Method 5: Use the PYTHONWARNINGS Environment Variable

For a more persistent solution that applies across multiple script runs or your entire session, set the PYTHONWARNINGS environment variable.

Windows (Command Prompt):

set PYTHONWARNINGS=ignore
python your_script.py

Windows (PowerShell):

$env:PYTHONWARNINGS="ignore"
python your_script.py

Linux / macOS:

export PYTHONWARNINGS=ignore
python your_script.py

You can also target specific categories:

export PYTHONWARNINGS="ignore::DeprecationWarning"
python your_script.py

Common Mistake: Suppressing Warnings Instead of Fixing Them

Consider this example where a developer silences a DeprecationWarning rather than updating their code:

import warnings

warnings.filterwarnings('ignore', category=DeprecationWarning)

import imp  # Deprecated since Python 3.4
module = imp.find_module("os")

This code runs silently today, but the imp module will be removed in a future Python version, breaking the application entirely.

The correct approach is to update the code to use the recommended replacement:

import importlib

spec = importlib.util.find_spec("os")
print(spec)

Output:

ModuleSpec(name='os', origin='.../os.py')

Quick Reference Summary

Method Scope Requires Code Changes Granularity
warnings.filterwarnings('ignore') Entire program Yes All or by category/module
warnings.catch_warnings() context manager Specific code block Yes All or by category
python -W ignore Single script run No All or by category
PYTHONWARNINGS=ignore Session or system-wide No All or by category

Conclusion

Python provides multiple flexible ways to disable warnings depending on your needs:

  • warnings.filterwarnings('ignore') is the quickest in-code solution for suppressing all or specific warnings globally.
  • warnings.catch_warnings() gives you precise, scoped control over a specific block of code.
  • Category-specific filtering lets you silence only the warning types you've decided are safe to ignore.
  • Command-line flags (-W ignore) and environment variables (PYTHONWARNINGS) let you suppress warnings without touching your source code.

Whichever method you choose, always investigate warnings before suppressing them. Warnings are early signals of problems, so silencing them should be a deliberate decision, not a default habit.

Navigation