try
if not x() then error end
if not y() then error end
else
// which error happened?
endLooking at your example, I would say, if you care about which error happened, you should be using separate try blocks.
Errors aren't meant for flow control like that so really, you shouldn't be indicating error inside a try like that.
One option that Pony could have gone with is to use union types to always indicate errors:
(My Result | MyError)
There's overhead to that though. You always have to match on the type. For situation where an error is unlikely, partial functions are nice. Partial functions are not exceptions though, and aren't designed to do flow control so trying to use like some might use exceptions (to do flow control) is going to be painful (as your example points out) because they weren't designed for that use case.
You should use a union type for that situation. Note, the current File API in the Pony standard library doesn't do that and it's something that we intend to fix before version 1.0. At this point, now one has gotten frustrated enough with it to open an RFC to propose an updated API. Someone will at some point though. But... volunteer project, limited time, itch to scratch etc.