Borrowing from RxPython, ThingFlow provides an on_error() interface for input things and filters. If a non-fatal error occurs, the associated thing should catch the error, print it out, pass it downstream using _dispatch_error() and then close the downstream connections. See IterableAsOutputThing for an example.
The problem with this approach is that errors just end up on standard output and operation continues (assuming there still is something to run). Ideally, we'd want to have a standard error handler for non-fatal errors (that just prints it as default) and some way of making non-fatal errors fatal. This is challenging, since the "things" don't have any access to the scheduler's state (the natural place to put this error handler).
Borrowing from RxPython, ThingFlow provides an on_error() interface for input things and filters. If a non-fatal error occurs, the associated thing should catch the error, print it out, pass it downstream using _dispatch_error() and then close the downstream connections. See IterableAsOutputThing for an example.
The problem with this approach is that errors just end up on standard output and operation continues (assuming there still is something to run). Ideally, we'd want to have a standard error handler for non-fatal errors (that just prints it as default) and some way of making non-fatal errors fatal. This is challenging, since the "things" don't have any access to the scheduler's state (the natural place to put this error handler).