On 2009-06-01 11:50, Dino Viehland wrote: > I’m just a little surprised by this - Is there a reason why syntax > warnings are special and untrappable via warnings.warn? > > >>> import warnings > > >>> def mywarn(*args): print 'xx', args > > ... > > >>> warnings.warn = mywarn > > >>> compile("def f():\n a = 1\n global a\n", "", "exec") > > :3: SyntaxWarning: name 'a' is assigned to before global declaration > > <code object <module> at 012DB410, file "", line 1> symtable.c uses PyErr_WarnExplicit() to provide file and line number information. You need to stub warnings.warn_explicit(). >>> import warnings >>> def mywarn_explicit(*args): ... print 'xx', args ... >>> warnings.warn_explicit = mywarn_explicit >>> compile("def f():\n a = 1\n global a\n", "", "exec") xx ("name 'a' is assigned to before global declaration", <type 'exceptions.SyntaxWarning'>, '', 3, None, None) <code object <module> at 0x39e9f8, file "", line 1> -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco
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