revisiting the "What am I running on?" question

Chris Angelico rosuav at gmail.com
Tue Feb 19 14:34:43 EST 2019


On Wed, Feb 20, 2019 at 6:29 AM Terry Reedy <tjreedy at udel.edu> wrote:
>
> On 2/19/2019 10:06 AM, Chris Angelico wrote:
> > On Wed, Feb 20, 2019 at 2:04 AM Chris Angelico <rosuav at gmail.com> wrote:
> >>
> >> On Wed, Feb 20, 2019 at 1:59 AM songbird <songbird at anthive.com> wrote:
> >>>
> >>> MRAB wrote:
> >>> ...
> >>>> Don't use a bare except, it'll catch _any_ exception.
> >>>
> >>>    that's ok with this code IMO, but i see your point.
> >>>
> >>
> >> Not really, no. It means that ANY bug (barring an outright syntax
> >> error) inside the try block will silently move you on to the next
> >> check, possibly after printing out the message.
> >
> > Oh, and not just bugs either. If the user hits Ctrl-C at just the
> > right moment, KeyboardInterrupt will be raised. You'll swallow that
> > exception silently, preventing the user-requested halt, and going and
> > doing the wrong thing.
>
> KeyboardInterrupt, SystemExit, and GeneratorExit are BaseExceptions but
> not Exceptions
>

Yes, and "except:" will catch them. Of them, KeyboardInterrupt is the
easiest example, as it can be caused by something outside the Python
program's control, has specific user-facing meaning, and can happen
literally anywhere (IIRC it's "between any two Python bytecodes", in
CPython). Suppressing KeyboardInterrupt can be done explicitly, but
should not be done accidentally.

ChrisA



More information about the Python-list mailing list