By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,386 Members | 1,676 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,386 IT Pros & Developers. It's quick & easy.

"Thinking like CS" problem I can't solve

P: n/a
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
Share this Question
Share on Google+
3 Replies


P: n/a
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

P: n/a
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

P: n/a
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.