On 21 Sep 2015, at 9:18, Victor Stinner wrote: > 2015-09-20 8:44 GMT+02:00 Serhiy Storchaka <storchaka at 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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4