Ezio Melotti added the comment: Attached a new patch that improves the following things: * added some tests; * the code in the previous message is now handled correctly; * the patch now raises a proper SyntaxWarning;
There are still several problems though: * it doesn't work for the global namespace. Is there a way to know if we are inside a function or not? * the patch leaks, and I couldn't figure out where the leak is; * I tried to include the name of the variable in the warning, but: - PyErr_WarnExplicit wants a const char* as msg and doesn't support formatting; - It doesn't seem possible to use other PyErr_Warn* functions here; - Using PyUnicode_FromFormat() works, but then I don't know how to convert the result to const char* (I used PyObject_REPR(), but that is probably wrong; PyUnicode_AS_DATA() might work but is deprecated; the PyUnicode_nBYTE_DATA() functions return a Py_UCSn*); * more testcases are needed While compiling I got this warning: ./setup.py:330: SyntaxWarning: "name 'why' is already defined but implicitly deleted after end of except clause" except ImportError as why: This comes from a code like: try: foo() except Exception as why: pass try: bar() except Exception as why: pass and in this case there shouldn't be any warning. A possible way to fix this is to keep a "whitelist" of locals that are first defined as an except target, but then it will still break if there's a `why = ...` between the two try/except and it's starting to get too complicated... ---------- Added file: http://bugs.python.org/file29989/issue17792-2.diff _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue17792> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com