Does this really need to be a bare except?
On Sat, Jun 18, 2011 at 8:21 PM, r.david.murray <python-check...@python.org> wrote: > http://hg.python.org/cpython/rev/9c96c3adbcd1 > changeset: 70867:9c96c3adbcd1 > user: R David Murray <rdmur...@bitdance.com> > date: Sat Jun 18 20:21:09 2011 -0400 > summary: > #6771: Move wrapper function into __init__ and eliminate wrapper module > > Andrew agreed in the issue that eliminating the module file made sense. > Wrapper has only been exposed as a function, and so there is no (easy) > way to access the wrapper module, which in any case only had the one > function in it. Since __init__ already contains a couple wrapper > functions, it seems to make sense to just move wrapper there instead of > importing it from a single function module. > > files: > Lib/curses/__init__.py | 46 +++++++++++++++++++++++++++- > Lib/curses/wrapper.py | 50 ------------------------------ > Misc/NEWS | 4 ++ > 3 files changed, 49 insertions(+), 51 deletions(-) > > > diff --git a/Lib/curses/__init__.py b/Lib/curses/__init__.py > --- a/Lib/curses/__init__.py > +++ b/Lib/curses/__init__.py > @@ -13,7 +13,6 @@ > __revision__ = "$Id$" > > from _curses import * > -from curses.wrapper import wrapper > import os as _os > import sys as _sys > > @@ -57,3 +56,48 @@ > has_key > except NameError: > from has_key import has_key > + > +# Wrapper for the entire curses-based application. Runs a function which > +# should be the rest of your curses-based application. If the application > +# raises an exception, wrapper() will restore the terminal to a sane state so > +# you can read the resulting traceback. > + > +def wrapper(func, *args, **kwds): > + """Wrapper function that initializes curses and calls another function, > + restoring normal keyboard/screen behavior on error. > + The callable object 'func' is then passed the main window 'stdscr' > + as its first argument, followed by any other arguments passed to > + wrapper(). > + """ > + > + try: > + # Initialize curses > + stdscr = initscr() > + > + # Turn off echoing of keys, and enter cbreak mode, > + # where no buffering is performed on keyboard input > + noecho() > + cbreak() > + > + # In keypad mode, escape sequences for special keys > + # (like the cursor keys) will be interpreted and > + # a special value like curses.KEY_LEFT will be returned > + stdscr.keypad(1) > + > + # Start color, too. Harmless if the terminal doesn't have > + # color; user can test with has_color() later on. The try/catch > + # works around a minor bit of over-conscientiousness in the curses > + # module -- the error return from C start_color() is ignorable. > + try: > + start_color() > + except: > + pass > + > + return func(stdscr, *args, **kwds) > + finally: > + # Set everything back to normal > + if 'stdscr' in locals(): > + stdscr.keypad(0) > + echo() > + nocbreak() > + endwin() > diff --git a/Lib/curses/wrapper.py b/Lib/curses/wrapper.py > deleted file mode 100644 > --- a/Lib/curses/wrapper.py > +++ /dev/null > @@ -1,50 +0,0 @@ > -"""curses.wrapper > - > -Contains one function, wrapper(), which runs another function which > -should be the rest of your curses-based application. If the > -application raises an exception, wrapper() will restore the terminal > -to a sane state so you can read the resulting traceback. > - > -""" > - > -import curses > - > -def wrapper(func, *args, **kwds): > - """Wrapper function that initializes curses and calls another function, > - restoring normal keyboard/screen behavior on error. > - The callable object 'func' is then passed the main window 'stdscr' > - as its first argument, followed by any other arguments passed to > - wrapper(). > - """ > - > - try: > - # Initialize curses > - stdscr = curses.initscr() > - > - # Turn off echoing of keys, and enter cbreak mode, > - # where no buffering is performed on keyboard input > - curses.noecho() > - curses.cbreak() > - > - # In keypad mode, escape sequences for special keys > - # (like the cursor keys) will be interpreted and > - # a special value like curses.KEY_LEFT will be returned > - stdscr.keypad(1) > - > - # Start color, too. Harmless if the terminal doesn't have > - # color; user can test with has_color() later on. The try/catch > - # works around a minor bit of over-conscientiousness in the curses > - # module -- the error return from C start_color() is ignorable. > - try: > - curses.start_color() > - except: > - pass > - > - return func(stdscr, *args, **kwds) > - finally: > - # Set everything back to normal > - if 'stdscr' in locals(): > - stdscr.keypad(0) > - curses.echo() > - curses.nocbreak() > - curses.endwin() > diff --git a/Misc/NEWS b/Misc/NEWS > --- a/Misc/NEWS > +++ b/Misc/NEWS > @@ -193,6 +193,10 @@ > Library > ------- > > +- Issue #6771: moved the curses.wrapper function from the single-function > + wrapper module into __init__, eliminating the module. Since __init__ was > + already importing the function to curses.wrapper, there is no API change. > + > - Issue #11584: email.header.decode_header no longer fails if the header > passed to it is a Header object, and Header/make_header no longer fail > if given binary unknown-8bit input. > > -- > Repository URL: http://hg.python.org/cpython > > _______________________________________________ > Python-checkins mailing list > python-check...@python.org > http://mail.python.org/mailman/listinfo/python-checkins > > _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com