Should Python raise a warning for mutable default arguments?
castironpi at gmail.com
Sat Aug 23 20:39:06 CEST 2008
On Aug 23, 9:40 am, Carl Banks <pavlovevide... at gmail.com> wrote:
> On Aug 23, 4:09 am, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
> > On Fri, 22 Aug 2008 20:37:09 -0700, Carl Banks wrote:
> > > On Aug 22, 10:42 am, Steven D'Aprano <st... at REMOVE-THIS-
> > > cybersource.com.au> wrote:
> > >> Sometimes it seems that barely a day goes by without some newbie, or
> > >> not- so-newbie, getting confused by the behaviour of functions with
> > >> mutable default arguments. No sooner does one thread finally, and
> > >> painfully, fade away than another one starts up.
> > >> I suggest that Python should raise warnings.RuntimeWarning (or
> > >> similar?) when a function is defined with a default argument consisting
> > >> of a list, dict or set. (This is not meant as an exhaustive list of all
> > >> possible mutable types, but as the most common ones that I expect will
> > >> trip up newbies.) The warning should refer to the relevant FAQ or
> > >> section in the docs.
> > >> What do people think?
> > > -1
> > > There's nothing questionable about using a mutable default argument, as
> > > long as you don't mutate it.
> > There's nothing questionable about using a mutable default argument, so
> > long as you know what behaviour to expect. I too use that behaviour, I
> > like that behaviour, and I'm tired of people who want it "fixed".
> > Nevertheless, it is surprising to many people. My aim is to make it a
> > little less surprising.
> > > Python shouldn't raise a warning just
> > > because something *might* be due to a misunderstanding.
> > That's one opinion.
> 1. When you print spurious warnings, the overall effectiveness of the
> warning system is diminished. People start to ignore them, either by
> disabling them or by mentally tuning out. This in turn makes people
> less likely to notice if a real warning is printed.
> Carl Banks
Question: what is real warning?
More information about the Python-list