13.11.17 14:29, Antoine Pitrou пише:
On Mon, 13 Nov 2017 22:37:46 +1100 Chris Angelico
wrote: On Mon, Nov 13, 2017 at 9:46 PM, Antoine Pitrou
wrote: On Sun, 12 Nov 2017 19:48:28 -0800 Nathaniel Smith
wrote: On Sun, Nov 12, 2017 at 1:24 AM, Nick Coghlan
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.