Newbie naive question ... int() throws ValueError
Terry Reedy
tjreedy at udel.edu
Fri May 11 11:51:47 EDT 2012
On 5/11/2012 1:55 AM, John Terrak wrote:
> I couldnt find anywhere in the documentation that int() can throw a ValueError.
> I checked the "The Python Language Reference", and the "The Python
> Standard Library " to no avail.
> Did I missed something?
To add to Chris' answer:
If the domain of a function is truly all Python objects, it cannot raise
an error. I believe id(x) is such an example.
Even if the domain is intended to be all Python objects, you cannot be
sure if the function uses any special method defined on the object or
its class. For examples, type(x) *should* always work, but I would not
be surprised if a buggy __getattribute__ method or buggy metaclass could
result in an exception instead.
If the arguments for a function include a function, for example map(f,
'abc'), then the passed function can raise any exception and hence the
called function will pass along the exception unless, unusually, it
catches it.
As to your specific question, if the domain of a function is a subset of
types and values of allowed types, then you should expect that it can
raise either TypeError or ValueError.
If the domain
> So here is the question - if it is not in the documentation - how does
> one find out the
> exceptions that are thrown by a constructor, a method or a function?
One way is to try specific examples, as you did. Following what Chris
said, especially do that for bad input whose exception you want to
catch. Sometimes this is faster than trying to find the answer in the
doc, and it gives the actual answer rather than the intended answer.
> Example: int("not_an_int")
>>>> int("not_an_int")
> Traceback (most recent call last):
> File "<stdin>", line 1, in<module>
> ValueError: invalid literal for int() with base 10: 'not_an_int'
Some strings are legal input, hence not a TypeError, but not all, hence
ValueError.
>> From what I gathered:
> class int(object):
> """ int(x[, base]) -> integer
>
> Convert a string or number to an integer, if possible. A floating point
> argument will be truncated towards zero (this does not include a string
> representation of a floating point number!) When converting a string, use
> the optional base. It is an error to supply a base when converting a
> non-string. If base is zero, the proper base is guessed based on the
> string content. If the argument is outside the integer range a
> long object will be returned instead. """
'error' should say 'TypeError' as it is a TypeError to provide the wrong
number of args. However, the current 3.3 manual entry is more accurate
and informative, starting with the signature.
--
Terry Jan Reedy
More information about the Python-list
mailing list