Why Do These Print() Calls Appear To Execute In The Wrong Order?
weird.py: import sys def f (): print('f', end = '') g() def g (): 1 / 0 try: f() except: print('toplevel', file = sys.stderr) Python session: Python 3.4.2 (
Solution 1:
Because stdout and stderr are line buffered. They buffer characters and only flush when you have a complete line.
By setting end='' you ensure there is no complete line and the buffer isn't flushed until later when the Python interactive interpreter outputs >>> and flushes the buffer explicitly.
If you remove file=sys.stderr you output to sys.stdout again, and you printed toplevel\n as print() adds a newline, thus flushing the sys.stdout buffer.
You can explicitly force a flush by setting the flush=True argument to the print() function (Python 3.3 and up) or by calling sys.stdout.flush().
Post a Comment for "Why Do These Print() Calls Appear To Execute In The Wrong Order?"