Python handling multiple exceptions
13,946
Solution 1
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
Solution 2
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
Author by
yayu
Updated on June 09, 2022Comments
-
yayu almost 2 years
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 fromException
. What can I do to avoid that?