Skip to main content

How to Disable Python Warnings

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.
caution

Suppressing warnings hides problems, it doesn't fix them! Always investigate warnings before deciding to silence them. Disable warnings only when you've confirmed they are safe to ignore for your specific use case.

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')

# This warning will be completely hidden
warnings.warn("This is a test warning")
print("Script executed successfully.")

Output:

Script executed successfully.
note

The filterwarnings('ignore') call tells Python to discard all warnings for the remainder of the program. The warnings.warn() call still executes, but its message is silently suppressed.

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:

CategoryDescription
DeprecationWarningFeatures that will be removed in future versions
FutureWarningChanges in behavior in future versions
UserWarningDefault category for warnings.warn()
RuntimeWarningSuspicious runtime behavior
SyntaxWarningDubious syntax
ResourceWarningResource usage issues

Example: Suppress Only DeprecationWarning

import warnings

# Suppress only DeprecationWarnings
warnings.filterwarnings('ignore', category=DeprecationWarning)

# This DeprecationWarning is hidden
warnings.warn("Old feature used", DeprecationWarning)

# This UserWarning still appears
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

# Suppress all warnings originating from the 'requests' library
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.py
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:

# Ignore only DeprecationWarnings
python -W "ignore::DeprecationWarning" your_script.py

# Ignore warnings from a specific module
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
tip

To make this setting permanent, add the export line to your shell profile file (~/.bashrc, ~/.zshrc, etc.). However, be mindful that this hides warnings for all Python scripts you run, which may mask real problems.

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)

# Using a deprecated function
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

# Modern replacement for imp.find_module
spec = importlib.util.find_spec("os")
print(spec)

Output:

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

Suppressing DeprecationWarning in production code creates technical debt. The warning exists to give you time to migrate before the feature is removed. Always treat deprecation warnings as action items, not noise.

Quick Reference Summary

MethodScopeRequires Code ChangesGranularity
warnings.filterwarnings('ignore')Entire programYesAll or by category/module
warnings.catch_warnings() context managerSpecific code blockYesAll or by category
python -W ignoreSingle script runNoAll or by category
PYTHONWARNINGS=ignoreSession or system-wideNoAll 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.