On 21 Sep 2015, at 9:18, Victor Stinner wrote:
2015-09-20 8:44 GMT+02:00 Serhiy Storchaka <storch...@gmail.com>:
I propose to make the default value of stacklevel to be 2.
I think that unlikely this will break existing code.
Consider this simple script:
---
import warnings
warnings.warn("here")
---
Currrent output:
---
x.py:3: UserWarning: here
warnings.warn("here")
---
=> it shows the script name (x.py), the line number and the line, as
expected.
Now try stacklevel=2:
---
import warnings
warnings.warn("here", stacklevel=2)
---
New output:
---
sys:1: UserWarning: here
---
"sys:1" is not really useful :-/
I would describe this as a regression, not an enhancement.
It's hard to find a "good" default value. It's better to always
specify stacklevel :-)
A "dynamic" stacklevel might help. Normally when you implement a call to
warning.warn() inside a module, you want to report the innermost
stacklevel that is outside of your module, because that's the spot where
the error likely is. This could be done automatically (report the first
module that is different from the one where the call to warning.warn()
is), or by specifying a base package name or regular expression, i.e.
report the innermost stackframe that is not from
"mypackage.mysubpackage").
See http://bugs.python.org/issue850482
Bye,
Walter Dörwald
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com