2.3 KiB
Raise Statement
In AVAP, the raise statement is used to throw an exception. The syntax for the raise statement is as follows:
raise [expression ["from" expression]]
If no expressions are present, raise re-raises the currently handled exception, also known as the active exception. If there is no active exception, a RuntimeError is raised indicating that it is an error.
Otherwise, raise evaluates the first expression as the exception object. It must be a subclass or an instance of BaseException . If it is a class, the exception instance is obtained when needed by creating an instance of the class without arguments.
The type of the exception is the instance of the exception class, and the value is the instance itself.
The from clause is used for exception chaining: if provided, the second expression must be another class or instance of exception. If the second expression is an exception instance, it will be attached to the raised exception as the __cause__ attribute (which is modifiable). If the expression is an exception class, the class will be instantiated and the resulting exception instance will be attached to the raised exception as the __cause__ attribute. If the raised exception is not handled, both exceptions will be printed.
startLoop()
try:
print(1 / 0)
except Exception as exc:
raise RuntimeError("Something went wrong") from exc
endLoop()
A mechanism works implicitly if a new exception is raised while an exception is already being handled. An exception may be handled by an except or finally clause, or a with statement. The previous exception is then attached as the new exception’s __context__ attribute:
startLoop()
try:
print(1 / 0)
except:
raise RuntimeError("Something went wrong") from None
endLoop()
Exception chaining can be explicitly suppressed by specifying None in the from clause:
startLoop()
try:
print(1 / 0)
except:
raise RuntimeError("Something went wrong") from None
endLoop()