It would be very helpful to have a Rejected-port on the PythonCaller.
Outputting a failed feature could e.g. look like this:
self.pyoutput_failed(feature)
This would simplify the pattern where you need to set a temporary attribute to indicate success/failure, then a Tester and then removing the temporary attribute.