You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
When writing generic code, one needs to take into account that __aexit__ could return True too, so even when in the particular case of grpclib it might never return None, the return type hint should be Optional[bool], otherwise when trying to store the return value to properly forward it when writing a wrapper, mypy will complain about getting a value which can only be None for the case of grpclib.
Having a quick look at the code, I'm not even sure if grpclib isn't actually supressing some exception in some __aexit__ (for example in Stream), so there might be even a bug lurking out there. Since I'm not familiar with the code it will take me a non trivial amount of time to find out.
The text was updated successfully, but these errors were encountered:
Forwarding None return type from a wrapper with Optional[bool] return type shouldn't cause any type check errors AFAIK. Error should incur if you try to return Optional[bool] as None return type.
There is only one place where we suppress exceptions and that __aexit__ method already has Optional[bool] return type.
But method signatures, especially those which are part of public API, should be correct anyway, so I will fix them.
Tried to fix signatures but then MyPy requires you to add return statements where they're not needed. So I will leave it as it is right now if there is no real issues. Feel free to update this issue with a reproducible code example which shows your issue.
I am getting typing errors, I guess it is because the type I'm calling __aexit__() to is a generic type. And I also noticed the requirement for an explicit return None, but I added it because I guess it is better to have an explicit return None if the returned value could be anything else to avoid any accidental returning with the wrong type/value.
According to Python docs:
When writing generic code, one needs to take into account that
__aexit__
could returnTrue
too, so even when in the particular case of grpclib it might never returnNone
, the return type hint should beOptional[bool]
, otherwise when trying to store the return value to properly forward it when writing a wrapper,mypy
will complain about getting a value which can only beNone
for the case of grpclib.Having a quick look at the code, I'm not even sure if grpclib isn't actually supressing some exception in some
__aexit__
(for example inStream
), so there might be even a bug lurking out there. Since I'm not familiar with the code it will take me a non trivial amount of time to find out.The text was updated successfully, but these errors were encountered: