Closed
Description
Currently an empty function body is accepted if a function returns a non-None
value (even with --strict-optional
). This is mostly useful for abstract methods. This is unsound, since we don't prevent anybody from calling these empty functions.
Here are some ideas for making this safe:
- Only allow empty function bodies for abstract methods. Other functions will need something like a return statement, a raise statement or
assert False
or# type: ignore
. - Tag abstract methods with an empty body with a flag in the AST, and disallow calls to them via
super()
.
This still wouldn't address empty functions defined in stubs, but perhaps can just assume that every function in a stub has a non-empty body.
See also discussion in #2339.