New submission from STINNER Victor:

The issue #26567 enhanced the warnings module to pass the destroyed object on 
ResourceWarning. The implementation to log the traceback where the object was 
allocated is non trivial, so I chose to only implement it in Python.

Problem: _warnings.warn_explicit() is lazy, it tries to get the warnings module 
from sys.modules, but it uses its own logger if the warnings is not imported 
yet.

As a consequence, the traceback where the object was allocated is only logged 
if tracemalloc is tracing Python memory allocations *and* if the warnings 
module is already imported.

I suggest to modify _warnings.warn_explicit() to import the warnings if it's 
not imported yet.

There are maybe issues to import a module during Python finalization? A 
comprise is to not try to import when Python finalization has started.

Example:
---
#import warnings
import tracemalloc
tracemalloc.start(10)
f = open("/etc/issue")
f = None
---

Current output:
---
x.py:5: ResourceWarning: unclosed file <_io.TextIOWrapper name='/etc/issue' 
mode='r' encoding='UTF-8'>
  f = None
---

Output if you uncomment the "import warnings":
---
x.py:5: ResourceWarning: unclosed file <_io.TextIOWrapper name='/etc/issue' 
mode='r' encoding='UTF-8'>
  f = None
Object allocated at (most recent call first):
  File "x.py", lineno 4
    f = open("/etc/issue")
---

Attached patch tries to import warnings if source object is set but not after 
the Pythin finalization has started.

----------
files: warnings_import.patch
keywords: patch
messages: 262049
nosy: haypo
priority: normal
severity: normal
status: open
title: _warnings.warn_explicit() should try to import the warnings module
type: enhancement
versions: Python 3.6
Added file: http://bugs.python.org/file42217/warnings_import.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue26592>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to