[Python-Dev] Re: [Python-checkins] CVS: python/dist/src/Lib/curses wrapper.py,1.2,1.3

Greg Stein gstein@lyra.org
Tue, 27 Jun 2000 03:52:02 -0700


I just don't buy this.

Look at that code. Look at the definition of finally. That code simply
screams for the use of finally.

Eric: just what happens? What is "broke things"? Do you have a reproducible
test case that I can use?

In good conscience, I have to disagree with reverting this stuff. If we're
seeking to make the code the best possible, then this is a backward step.
Besides its redundancy, it also places the traceback into a local variable
and then raises an exception -- a perfect recipe for creating a ref loop.

Cheers,
-g

On Mon, Jun 26, 2000 at 05:50:42PM -0700, A.M. Kuchling wrote:
> Update of /cvsroot/python/python/dist/src/Lib/curses
> In directory slayer.i.sourceforge.net:/tmp/cvs-serv26153
> 
> Modified Files:
> 	wrapper.py 
> Log Message:
> Drop back to old version of wrapper(); ESR reports that it broke things,
> and I lack the time to track down the cause.
> 
> 
> Index: wrapper.py
> ===================================================================
> RCS file: /cvsroot/python/python/dist/src/Lib/curses/wrapper.py,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -C2 -r1.2 -r1.3
> *** wrapper.py	2000/06/10 23:39:05	1.2
> --- wrapper.py	2000/06/27 00:50:40	1.3
> ***************
> *** 18,24 ****
> --- 18,26 ----
>       """
>       
> +     res = None
>       try:
>   	# Initialize curses
>   	stdscr=curses.initscr()
> +         
>   	# Turn off echoing of keys, and enter cbreak mode,
>   	# where no buffering is performed on keyboard input
> ***************
> *** 30,39 ****
>           stdscr.keypad(1)
>   
> ! 	return apply(func, (stdscr,) + rest)
> ! 
> !     finally:
> ! 	# Restore the terminal to a sane state on the way out.
>   	stdscr.keypad(0)
>   	curses.echo() ; curses.nocbreak()
>   	curses.endwin()
>   
> --- 32,51 ----
>           stdscr.keypad(1)
>   
> !         res = apply(func, (stdscr,) + rest)
> !     except:
> ! 	# In the event of an error, restore the terminal
> ! 	# to a sane state.
>   	stdscr.keypad(0)
>   	curses.echo() ; curses.nocbreak()
>   	curses.endwin()
> +         
> +         # Pass the exception upwards
> +         (exc_type, exc_value, exc_traceback) = sys.exc_info()
> +         raise exc_type, exc_value, exc_traceback
> +     else:
> + 	# Set everything back to normal
> + 	stdscr.keypad(0)
> + 	curses.echo() ; curses.nocbreak()
> + 	curses.endwin()		 # Terminate curses
>   
> +         return res
> 
> 
> _______________________________________________
> Python-checkins mailing list
> Python-checkins@python.org
> http://www.python.org/mailman/listinfo/python-checkins

-- 
Greg Stein, http://www.lyra.org/