[Zope-dev] BUG: ValueError while changing height of the template
edit window
Steve Alexander
steve@cat-box.net
Wed, 11 Dec 2002 09:15:33 +0000
Guido van Rossum wrote:
> Can we get the same patch without the generic "except:", please?
<snipped part about whether there could be database corruption>
> int() happens to raise a bunch of different exceptions, and I think
> an unqualified except: clause is okay here (though it needs a
> comment).
I think this would be a useful note for the Zope3 style guide.
What exceptions can int() raise?
On converting a preexisting value to an int:
ValueError, OverflowError, TypeError, AttributeError
(Any others?)
On converting an instance that implements __int__:
Anything at all.
It can even return a non-int value.
On evaluating the expression inside the int() brackets:
Anything at all.
I would suggest that only the four exceptions I listed first are worth
catching. The other cases are programming errors.
Of those four exceptions, in this situation, I think you only need to
catch ValueError. The other cases are application logic errors that I
think it is counterproductive to catch. If you get one, there is a bug
in some code, or some template, that should be fixed.
Here's how I produced the errors listed in the first category:
>>> int('xxx')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: invalid literal for int(): xxx
>>> import sys
>>> int(sys.maxint+1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
OverflowError: long int too large to convert to int
>>> int(int)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: int() argument must be a string or a number
>>> int(AttributeError())
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: AttributeError instance has no attribute '__int__'
--
Steve Alexander