In [ ]:
# exception handling
# unexpected errors

In [2]:
# our program

num1 = input("please enter your num1:")
num2 = input("please enter your num2:")
results = num1/num2
print "results - {}".format(results)


please enter your num1:10
please enter your num2:2
results - 5

In [3]:
# case 1:
num1 = input("please enter your num1:")
num2 = input("please enter your num2:")
results = num1/num2
print "results - {}".format(results)


please enter your num1:ten
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-132148f93615> in <module>()
      1 # case 1:
----> 2 num1 = input("please enter your num1:")
      3 num2 = input("please enter your num2:")
      4 results = num1/num2
      5 print "results - {}".format(results)

/usr/lib/python2.7/dist-packages/IPython/kernel/zmq/ipkernel.pyc in <lambda>(prompt)
    362         if content.get('allow_stdin', False):
    363             raw_input = lambda prompt='': self._raw_input(prompt, ident, parent)
--> 364             input = lambda prompt='': eval(raw_input(prompt))
    365         else:
    366             raw_input = input = lambda prompt='' : self._no_raw_input()

/usr/lib/python2.7/dist-packages/IPython/kernel/zmq/ipkernel.pyc in <module>()

NameError: name 'ten' is not defined

In [4]:
# case 2:
num1 = input("please enter your num1:")
num2 = input("please enter your num2:")
results = num1/num2
print "results - {}".format(results)


please enter your num1:10
please enter your num2:0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-4-e11108bde8d1> in <module>()
      2 num1 = input("please enter your num1:")
      3 num2 = input("please enter your num2:")
----> 4 results = num1/num2
      5 print "results - {}".format(results)

ZeroDivisionError: integer division or modulo by zero

In [5]:
# what are the various exception python supports?

In [6]:
import exceptions as e

In [7]:
print dir(e)


['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__doc__', '__name__', '__package__']

In [8]:
# try..except..else..finally
# try - computation steps or most important steps which could lead to exception
# except - what needs to be done when you hit on a exception
# else - if all is green with try .. what you want to do.

In [9]:
# All values are sane.
# try..else
try:
    num1 = input("please enter your num1:")
    num2 = input("please enter your num2:")
    results = num1/num2
except: 
    print "Please enter a number.Please make sure your denominator is non-zero"
else:
    print "results - {}".format(results)


please enter your num1:10
please enter your num2:2
results - 5

In [10]:
# lets give num1 as "string"
# try..except
try:
    num1 = input("please enter your num1:")
    num2 = input("please enter your num2:")
    results = num1/num2
except: 
    print "Please enter a number.Please make sure your denominator is non-zero"
else:
    print "results - {}".format(results)


please enter your num1:ten
Please enter a number.Please make sure your denominator is non-zero

In [11]:
# lets give num1 as 10 and num2 as 0
# try .. except
try:
    num1 = input("please enter your num1:")
    num2 = input("please enter your num2:")
    results = num1/num2
except: 
    print "Please enter a number.Please make sure your denominator is non-zero"
else:
    print "results - {}".format(results)


please enter your num1:10
please enter your num2:0
Please enter a number.Please make sure your denominator is non-zero

In [12]:
## more refining

In [22]:
try:
    num1 = input("please enter your num1:")
    num2 = input("please enter your num2:")
    results = num1/num2
except (ZeroDivisionError,NameError): 
    print "Please enter a number.Please make sure your denominator is non-zero"
else:
    print "results - {}".format(results)


please enter your num1:ten
Please enter a number.Please make sure your denominator is non-zero

In [25]:
try:
    num1 = input("please enter your num1:")
    num2 = input("please enter your num2:")
    results = num1/num2
except ZeroDivisionError:
    print "please make sure your denominator is non-zero"
except NameError: 
    print "Please enter a number."
else:
    print "results - {}".format(results)


please enter your num1:ten
Please enter a number.

In [ ]:
# try..except..else..finally
# try - computation steps or most important steps which could lead to exception
# except - what needs to be done when you hit on a exception
# else - if all is green with try .. what you want to do.
# finally - 
# case 1: i will give all valid values -> try..else..finally.
# case 2: i will give a invalid value .. managed by exceptions -> try..except..finally
# case 3: i will give a invalid value.. not managed by exceptions -> try..finally.. bombed with exception.

In [29]:
try:
    num1 = input("please enter your num1:")
    num2 = input("please enter your num2:")
    results = num1/num2
except NameError: 
    print "Please enter a number."
else:
    print "results - {}".format(results)
finally:
    print "All izz well"  # close all my resource here. db.close,file.close,socket.close


please enter your num1:10
please enter your num2:0
All izz well
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-29-9c41f9cc1bdb> in <module>()
      2     num1 = input("please enter your num1:")
      3     num2 = input("please enter your num2:")
----> 4     results = num1/num2
      5 except NameError:
      6     print "Please enter a number."

ZeroDivisionError: integer division or modulo by zero

In [31]:
# raise

raise SyntaxError,"please clean your glasses!!!"


  File "<string>", line unknown
SyntaxError: please clean your glasses!!!

In [32]:
# you cannot raise every other word for exception
# you can only raise those exception which are part of exception class.
raise kumar


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-32-acca090f154d> in <module>()
      1 # you cannot raise every other word for exception
----> 2 raise kumar

NameError: name 'kumar' is not defined

In [33]:
# custoomized exceptions
# kumar is a subclass of exception super class.
class kumar(Exception):
    pass

raise kumar,"i am back"


---------------------------------------------------------------------------
kumar                                     Traceback (most recent call last)
<ipython-input-33-f65ee7e688a9> in <module>()
      3     pass
      4 
----> 5 raise kumar,"i am back"

kumar: i am back

In [ ]: