[Python-bugs-list] [ python-Bugs-467381 ] print statement and exception

noreply@sourceforge.net noreply@sourceforge.net
Fri, 05 Oct 2001 19:05:53 -0700


Bugs item #467381, was opened at 2001-10-02 19:19
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=467381&group_id=5470

Category: Python Interpreter Core
Group: Not a Bug
Status: Closed
Resolution: Invalid
Priority: 5
Submitted By: paul rubin (phr)
Assigned to: Guido van Rossum (gvanrossum)
Summary: print statement and exception

Initial Comment:
a = 3
b = 0
try:
  print "quotient is",a/b
except: pass
print "sum is", a+b

prints something like "quotient is sum is 3".
The first print statement prints "quotient is"
before the exception is thrown, and then doesn't
print the final newline.  The final newline should
be protected by the equivalent of a "finally" clause.




----------------------------------------------------------------------

>Comment By: Guido van Rossum (gvanrossum)
Date: 2001-10-05 19:05

Message:
Logged In: YES 
user_id=6380

Well, the docs don't say at all what happens when an 
exception occurs.  I don't want to argue over this any 
more, but I note that the use of the phrase "in turn" was 
meant to suggest that each value is written as soon as it's 
available.

----------------------------------------------------------------------

Comment By: paul rubin (phr)
Date: 2001-10-05 15:56

Message:
Logged In: YES 
user_id=72053

I believe that's inconsistent with the documentation,
(http://www.python.org/doc/current/ref/print.html),
which says 'A "\n" character is written at the end, unless the
print statement ends with a comma.'.  It also says "print
evaluates each expression in turn and writes the resulting
object to the standard output", which could be interpreted to
mean it builds up a tuple of the value of all the expressions,
then prints the tuple.  In that situation, an exception evaluating
one of the expressions could result in printing nothing at all,
or just printing a blank line.  Anyway, I never would have guessed
the actual behavior by reading the documentation.

At minimum, the doc should be clarified.

Regards

Paul


----------------------------------------------------------------------

Comment By: Guido van Rossum (gvanrossum)
Date: 2001-10-02 20:08

Message:
Logged In: YES 
user_id=6380

Sorry, this is how it's defined. The print statement does
its things one at a time. If one of its things raises an
exception, then the remaining things won't be printed --
including the newline.

If that's not what you want, calculate the value and catch
the exception before printing the value, or use a print with
a trailing comma (suppresses the newline printing) and use
an empty print statement separately (supplies the newline),
like this:

try:
  print "quotient is", a/b,
except: pass
print


----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=467381&group_id=5470