![](https://secure.gravatar.com/avatar/bc2071afd499daef001e75e14d7f9cce.jpg?s=120&d=mm&r=g)
Quoth Terry Reedy: [...]
A conversion utility that converted 'raise item' to 'raise item()' and 'raise item,arg' to 'raise item(arg)' would definitely be helpful. A working version, or at least a promise to produce one on acceptance might make the PEP more palatable.
I do intend to write such a tool.
I'd imagined that, being PEP champion, I would be the obvious person to produce the relevant patches to the standard library. There are more than a thousand raise statements there, mostly of the implicitly instantiating type, so you can bet I'm not doing it by hand if I can avoid it.
PEP-290 advises against automated tools for this type of change. Every line of code needs to be read and understood before changing it. Then, each change should be reviewed. It's the only way to make sure you're not introducing mindless cut and paste errors throughout the code. It is for this reason that I've spent more than one weekend reviewing every line of Walter's code updates -- he does them by hand and has less than a 2% error rate. Also, take a look at what would need to be done to the test suite. The changes there are less amenable to an automated update. Grep could find most potential changes but I don't see how you can statically determine whether 'raise x' is a class or instance without running the code. That brings up the question of whether the warnings are a runtime or compile time event. Can you always determine at compile time whether raise Class is being used? If not, the performance penalty for the warnings module is something else to consider. Except for conceptual purity, is there any real payoff in terms of performance or capability that would warrant a wholesale revision of working code? Raymond Hettinger ################################################################# ################################################################# ################################################################# ##### ##### ##### ################################################################# ################################################################# #################################################################