[Tutor] try and except
Hugo Arts
hugo.yoshi at gmail.com
Tue Dec 29 22:17:28 CET 2009
On Tue, Dec 29, 2009 at 9:47 PM, Grigor Kolev <grigor.kolev at gmail.com> wrote:
> Hi.
> Can someone explain me where is my mistake.
> -----------------------------------------------
> class Error(Exception):
> def printer(self , value ):
> self.value = value
> print self.value
> def oops():
> raise Error
> def domoed():
> try:
> oops()
> except Error:
> Test = Error()
> print 'Error: ', Test.printer('Test')
> else:
> print 'no error'
> if __name__ == "__main__":
> domoed()
> ------------------------------------------------------
> Result is:
> Error: Test
> None
> >From where come it None
The line "print 'Error: ', Test.printer('Test')" is where it goes
wrong. You should follow closely the execution of this statement:
* print 'Error: ',
The string "Error: " is printed to the screen. There is a comma, so
the next time something prints, it will be on the same line.
* Test.printer('Test')
Still on the same line, so the print statement will print the return
value of this function. To do that, we need to execute the function
* self.value = value
print self.value
the second statement will result in the string 'Test' being printed to
the screen, on the same line as what was previously printed (because
of our comma earlier). There is no comma here, so the next thing that
is printed will be on a new line.
* Test.printer('Test')
The function is now done executing. What did it return? well, there
was no return statement in the function, so it returned nothing.
Nothing in python is written as 'None.' So, None is printed to the
screen.
To fix this, you could either make sure the return value is not
printed, like so:
print 'Error: ',
Test.printer('Test')
or, make the printer function a 'returner' function, like so:
def returner(self , value ):
self.value = value
return self.value
In general, the 'returner' function is preferable, since it is more
general and thus more flexible.
Hugo
More information about the Tutor
mailing list