How do I get warnings.warn to issue a warning and not ignore the line?
Question: I'm trying to raise a `DeprecationWarning`, with a code snippet based on the
example shown in the docs.
<http://docs.python.org/2/library/warnings.html#warnings.warn>

Official

    
    
    def deprecation(message):
        warnings.warn(message, DeprecationWarning, stacklevel=2)
    

Mine

    
    
    import warnings
    warnings.warn("This is a warnings.", DeprecationWarning, stacklevel=2) is None  # returns True
    

I've tried removing the stacklevel argument, setting it to negative, 0, 2 and
20000. The warning is always silently swallowed. It doesn't issue a warning or
raise an exception. It just ignores the line and returns `None`. The docs
doesn't mention the criteria for ignoring. Giving a message, makes
warnings.warn correctly issue a `Userwarning.`

What can be causing this and how do I get warn to actually warn?


Answer: From the docs:

> By default, Python installs several warning filters, which can be overridden
> by the command-line options passed to -W and calls to filterwarnings().
>
>   * DeprecationWarning and PendingDeprecationWarning, and ImportWarning are
> ignored.
>   * BytesWarning is ignored unless the -b option is given once or twice; in
> this case this warning is either printed (-b) or turned into an exception
> (-bb).
>

By default, `DeprecationWarning` is ignored. You can change the filters using
the following:

    
    
    warnings.simplefilter('always', DeprecationWarning)
    

Now your warnings should be printed:

    
    
    >>> import warnings
    >>> warnings.simplefilter('always', DeprecationWarning)
    >>> warnings.warn('test', DeprecationWarning)
    /home/guest/.env/bin/ipython:1: DeprecationWarning: test
      #!/home/guest/.env/bin/python
    

