"Thinking like CS" problem I can't solve

gry at ll.mit.edu gry at ll.mit.edu
Tue May 23 20:20:09 CEST 2006


Alex Pavluck wrote:
> Hello.  On page 124 of "Thinking like a Computer Scientist".  There is
> an exercise to take the following code and with the use of TRY: /
> EXCEPT: handle the error.  Can somone help me out?  Here is the code:
>
> def inputNumber(n):
>     if n == 17:
>         raise 'BadNumberError: ', '17 is off limits.'
>     else:
>         print n, 'is a nice number'
>     return n
>
> inputNumber(17)

Yikes!  It's a very bad idea to use string literals as exceptions.
Use one of the classes from the 'exceptions' module, or derive
your own from one of them.  E.g.:

class BadNum(ValueError):
    pass
def inputNumber(n):
    if n == 17:
        raise BadNum('17 is off limits')
    else:
        print n, 'is a nice number'

try:
    inputNumber(17)
except BadNum, x:
    print 'Uh Oh!', x

Uh Oh! 17 is off limits


See:
   http://docs.python.org/ref/try.html#try
especially the following bit:

...the clause matches the exception if the resulting object is
``compatible'' with the exception. An object is compatible with an
exception if it is either the object that identifies the exception, or
(for exceptions that are classes) it is a base class of the
exception,... Note that the object identities must match, i.e. it must
be the same object, not just an object with the same value.

Identity of string literals is a *very* slippery thing.  Don't
depend on it.  Anyway, python 2.5 gives a deprecation
warning if a string literal is used as an exception.




More information about the Python-list mailing list