469,625 Members | 1,137 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,625 developers. It's quick & easy.

"Thinking like CS" problem I can't solve

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)

May 23 '06 #1
3 1197
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:
[ ... ]


What error?

Python 2.4.2 (#1, Jan 23 2006, 21:24:54)
[GCC 3.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
def inputNumber(n): .... if n == 17:
.... raise 'BadNumberError: ', '17 is off limits.'
.... else:
.... print n, 'is a nice number'
.... return n
.... inputNumber(17)

Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in inputNumber
BadNumberError: : 17 is off limits.
That error, I guess. try:/except...: can catch it and
prevent the traceback. You could, say, print your own
message and continue with your script. Look up how to
use try:/except... .

Cheers, Mel.
May 23 '06 #2
gry
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.

May 23 '06 #3
gry
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.

May 23 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Arun Bhalla | last post: by
5 posts views Thread by Matthew Qvapul | last post: by
134 posts views Thread by James A. Donald | last post: by
1 post views Thread by David L | last post: by
3 posts views Thread by Rik Beacroft | last post: by
2 posts views Thread by phoover.eml | last post: by
8 posts views Thread by =?Utf-8?B?UiBSZXllcw==?= | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.