Quantcast
Channel: Tech Tutorials
Viewing all articles
Browse latest Browse all 938

raise Statement in Python Exception Handling

$
0
0

In Python Exception Handling - try,except,finally we saw some examples of exception handling in Python but exceptions in all the examples there were thrown automatically. You can throw an exception manually too using raise statement in Python.

Python raise statement

For throwing an exception using raise there are the following options-

1. You can simply use raise without any other expression. If no expressions are present, raise re-raises the last exception that was active in the current scope. If no exception is active in the current scope, a RuntimeError exception is raised indicating that this is an error.


def divide_num(num1, num2):
try:
print('Result-',num1/num2)
except ZeroDivisionError as error:
print('Zero is not a valid argument here')
#raise with no expression
raise


divide_num(10, 0)

Output


Zero is not a valid argument here
Traceback (most recent call last):
File "F:/NETJS/NetJS_2017/Python/Programs/Test.py", line 10, in <module>
divide_num(10, 0)
File "F:/NETJS/NetJS_2017/Python/Programs/Test.py", line 3, in divide_num
print('Result-',num1/num2)
ZeroDivisionError: division by zero

As you can see raise statement re-raises the last exception again.

2. If raise is used with an expression then raise evaluates the first expression as the exception object. It must be either a subclass or an instance of BaseException. If it is a class, the exception instance will be obtained when needed by instantiating the class with no arguments.


def divide_num(num1, num2):
try:
print('Result-',num1/num2)
except ZeroDivisionError as error:
print('Zero is not a valid argument here')
raise RuntimeError("An error occurred")


divide_num(10, 0)

Output


Zero is not a valid argument here
Traceback (most recent call last):
File "F:/NETJS/NetJS_2017/Python/Programs/Test.py", line 3, in divide_num
print('Result-',num1/num2)
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "F:/NETJS/NetJS_2017/Python/Programs/Test.py", line 9, in <module>
divide_num(10, 0)
File "F:/NETJS/NetJS_2017/Python/Programs/Test.py", line 6, in divide_num
raise RuntimeError("An error occurred")
RuntimeError: An error occurred

As you can see in this case previous exception is attached as the new exception’s __context__ attribute.

3. raise can also be used with from clause for exception chaining. With from another exception class or instance is given, which will then be attached to the raised exception as the __cause__ attribute.

In the example there are two functions, from function func() there is a call to function divide_num with arguments that cause ZeroDivisionError.


def divide_num(num1, num2):
try:
print('Result-',num1/num2)
except ZeroDivisionError as error:
print('Zero is not a valid argument here')
raise RuntimeError("An error occurred") from error


def func():
try:
divide_num(10, 0)
except RuntimeError as obj:
print(obj)
print(obj.__cause__)

func()

Output


Zero is not a valid argument here
An error occurred
division by zero

As you can see using __cause__ attribute you can get the attached exception.

That's all for this topic raise Statement in Python Exception Handling. If you have any doubt or any suggestions to make please drop a comment. Thanks!

>>>Return to Python Tutorial Page


Related Topics

  1. Passing Object of The Class as Parameter in Python
  2. Encapsulation in Python
  3. Abstract Class in Python
  4. Interface in Python
  5. Strings in Python With Method Examples

You may also like -

  1. Magic Methods in Python With Examples
  2. Check if String Present in Another String in Python
  3. HashSet in Java
  4. Java Collections Interview Questions And Answers
  5. this Keyword in Java With Examples
  6. What is Hadoop Distributed File System (HDFS)
  7. Dependency Injection in Spring Framework
  8. Spring Object XML Mapping (OXM) JAXB Example

Viewing all articles
Browse latest Browse all 938

Trending Articles