I tend to avoid exceptions, and I don't see a strong reason to use them. I usually try to distinguish exceptions from validations and failures. In that case exception is something that the code doesn't handle so it is interrupted.
Also, I think it's bad practice to use exceptions as a way to do control flow
My suggestion for using exceptions was mostly based on how RPC currently already uses that pattern. I'm also fine with functions returning status codes and passing &error strings e.g.,
huh I got a transient error "test_framework.authproxy.JSONRPCException: non-mandatory-script-verify-flag (Signature must be zero for failed CHECK(MULTI)SIG operation) (code 64)" while running rpc_createmultisig.py locally, once, but cannot reproduce it
happened during tx = node0.sendrawtransaction(rawtx3["hex"], True)
wumpus: do you get that on current master?
test runs successful on my end (master)
Hmm, looks like the intermittent errors are returning at just in time for the branch-off