Instead of returning an unPythonic error code, we can simply emit our error message and re-raise the exception
object we're currently handling. This can be done by replacing the return -1
with a raise
statement at the end of our exception handling block:
def convert(s): """Convert a string to an integer.""" try: return int(s) except (ValueError, TypeError) as e: print("Conversion error: {}".format(str(e)), file=sys.stderr) raise
Without a parameter raise simply re-raises the exception that is currently being handled.
Testing in the REPL, we can see that the original exception type is re-raised whether it's a ValueError
or a TypeError
, and our Conversion error
message is printed to stderr
along the way:
>>> from exceptional import string_log >>> string_log("25") 3.2188758248682006 >>> string_log("cat") Conversion error: invalid literal for int() with base 10: 'cat' Traceback (most recent call last): File "...