Am 03.03.2010 12:47, schrieb Oren Elrad:
""" code involving somefile """
try:
........os.remove(somefile)
except:
.......pass     # The bloody search indexer has got the file and I
can't delete it. Nothing to be done.

You don't know that what you stated in your comment is true.
All you know is that there was an exception. To find the reason, you have to inspect the exception.
You escpecially do NOT know whether the file is removed or not.

OK, os.remove() might be a CPython builtin (not sure ATM), but in general all sort of crazy things can happen here, like ImportError raised by code in the lib or so. And of course: a bare except: also catches ^C or SystemExit. That is almost certainly *not* what you want, right?

To your first question about a "silenced" keyword: you could emulate this with context managers I guess.

Something like (untested, just a quick mockup how it could look):



class silenced:
        def __init__(self, *silenced):
                self.exceptions=tuple(silenced) #just to be explicit
        def __enter__(self):
                return self                     #dito1
        def __exit__(self, type, value, traceback):
                for ex in self.exceptions:
                        if isinstance(value, ex):
                                return True #supresses exception


So:

with silenced(os.Error):
        os.remove(somefile)

Would translate to:

try:
        os.remove(somefile)
except os.Error:
        pass

One nice thing about this approach would be that you can alias a set of exceptions with this:

idontcareabouttheseerrors=silenced(TypeError, ValueError, PEBCAKError, SyntaxError, EndOfWorldError, 1D10T_Error)

with idontcareabouttheseerrors:
        do_stuff()

Regards,
Michael
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to