简体   繁体   中英

Python handling multiple exceptions

I want to handle a specific exception in a certain way, and generically log all the others. This is what I have:

class MyCustomException(Exception): pass


try:
    something()
except MyCustomException:
    something_custom()
except Exception as e:
    #all others
    logging.error("{}".format(e))

The problem is that even MyCustomException will be logged because it inherits from Exception . What can I do to avoid that?

What else is going on in your code?

MyCustomException should be checked and handled before flow ever gets to the second except clause

In [1]: def test():
   ...:     try:
   ...:         raise ValueError()
   ...:     except ValueError:
   ...:         print('valueerror')
   ...:     except Exception:
   ...:         print('exception')
   ...:         

In [2]: test()
valueerror

In [3]: issubclass(ValueError,Exception)
Out[3]: True

Only the first matching except block will be executed:

class X(Exception): pass

try:
    raise X
except X:
    print 1
except Exception:
    print 2

only prints 1.

Even if you raise an exception in an except block, it won't be caught by the other except blocks:

class X(Exception): pass

try:
    raise X
except X:
    print 1
    0/0
except Exception:
    print 2

prints 1 and raises ZeroDivisionError: integer division or modulo by zero

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM