"Thinking like CS" problem I can't solve

A

Alex Pavluck

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)
 
M

Mel Wilson

Alex said:
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..... if n == 17:
.... raise 'BadNumberError: ', '17 is off limits.'
.... else:
.... print n, 'is a nice number'
.... return n
....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.
 
G

gry

Alex said:
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.
 
G

gry

Alex said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top