[Python-Dev] PEP 565: Show DeprecationWarning in __main__

Serhiy Storchaka storchaka at gmail.com
Mon Nov 13 09:09:01 EST 2017


13.11.17 14:29, Antoine Pitrou пише:
> On Mon, 13 Nov 2017 22:37:46 +1100
> Chris Angelico <rosuav at gmail.com> wrote:
>> On Mon, Nov 13, 2017 at 9:46 PM, Antoine Pitrou <solipsis at pitrou.net> wrote:
>>> On Sun, 12 Nov 2017 19:48:28 -0800
>>> Nathaniel Smith <njs at pobox.com> wrote:
>>>> On Sun, Nov 12, 2017 at 1:24 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:
>>>>> This change will lead to DeprecationWarning being displayed by default for:
>>>>>
>>>>> * code executed directly at the interactive prompt
>>>>> * code executed directly as part of a single-file script
>>>>
>>>> Technically it's orthogonal, but if you're trying to get better
>>>> warnings in the REPL, then you might also want to look at:
>>>>
>>>> https://bugs.python.org/issue1539925
>>>> https://github.com/ipython/ipython/issues/6611
>>>
>>> Depends what you call "better".  Personally, I don't want to see
>>> warnings each and every time I use a deprecated or questionable
>>> construct or API from the REPL.
>>
>> Isn't that the entire *point* of warnings? When you're working at the
>> REPL, you're the one in control of which APIs you use, so you should
>> be the one to know about deprecations.
> 
> If I see a warning once every REPL session, I know about the deprecation
> already, thank you.  I don't need to be taken by the hand like a little
> child.  Besides, the code I write in the REPL is not meant for durable
> use.

Hmm, now I see that the simple Nathaniel's solution is not completely 
correct. If the warning action is 'module', it should be emitted only 
once if used directly in the REPL, because '__main__' is the same module.

But if you use functions foo() and bar(), and both emit the same 
warning, you should get a warning from every entered command, because 
after the first warning you know only about the first function.



More information about the Python-Dev mailing list