I understand that
__enter__ and __exit__ are used to implement a context manager.
if an exception occurs in a with statement, the exception's type, value and traceback are passed to the __exit__ method.
__exit__ can handle the exception:
True: the exception is gracefully handled.with statement raises the exceptionI came across the following __exit__ method. Is the return statement redundant?
def __exit__(self, type, value, traceback):
self.close()
return type == None
since it seems to me that,
type will naturally be None, so __exit__ returns true. Nothing is raised.type is set to the actual exception type, so __exit__ returns false. The exception is raised as is.Yes, that return statement is redundant. Only when type is not None does the return value matter.
From the object.__exit__() documentation:
If an exception is supplied, and the method wishes to suppress the exception (i.e., prevent it from being propagated), it should return a true value. Otherwise, the exception will be processed normally upon exit from this method.
Note that a true value will suppress the exception; so 1 or "Handled!" would also work, not just True.
Removing that return line would result in None being returned instead, and the functionality would remain unchanged. Readability would be improved however, because that return type == None statement is just confusing on multiple levels (why not use type is None for example?).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With