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

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to