The error inside the library is probably written to the standard error output sys.stderr
. You could thus redirect the error output and check if the library is writing to it. See for instance this question on logging error output.
Once you have a logger (or in your case a class that records and parses any errors), use it like this:
import sys
_stderr = sys.stderr
sys.stderr = MyErrorCheckLogger()
try:
myOrder = myAddress.sell(...)
finally:
sys.stderr = _stderr
Of course, you can do the same thing with sys.stdout
—the standard output channel.
Edit: Here is a full example where we catch any error messages directly printed to the standard output (stdout
).
import sys
class ErrorChecker:
def __init__(self, output):
self.output = output # Save the original `stdout` (or `stderr`)
self.buffer = "" # The buffer for the message printed
def write(self, message):
self.buffer += message # Add any message to our buffer
self.output.write(message) # Print it as original intended
def flush(self):
self.output.flush()
def throwError(f, *args, **kwargs):
sys.stdout = ErrorChecker(sys.stdout) # Create a new output-stream with buffer
try:
result = f(*args, **kwargs) # Execute the code that might cause an error
finally:
buffer = sys.stdout.buffer # Get the output buffer
sys.stdout = sys.stdout.output # Restore the original 'stdout'
if buffer.startswith("[ERROR]"): # If the output is an error message, raise
raise Exception(buffer) # it as an actual exception
return result
myOrder = throwError(myAddress.sell, assetPair = PRO_WAVES, amount = 1491999999, price = proprice1, matcherFee = 700000, maxLifetime = 3600)