Python Unit2 - Watermark
Python Unit2 - Watermark
As the part of programming requirement, we have to store our data permanently for
future purpose. For this requirement we should go for files.
Files are very common permanent storage areas to store our data.
Types of Files:
There are 2 types of files
1. Text Files:
2. Binary Files:
Usually we can use binary files to store binary data like images,video files, audio files etc...
Opening a File:
Before performing any operation (like read or write) on the file,first we have to open that
file.For this we should use Python's inbuilt function open()
But at the time of open, we have to specify mode,which represents the purpose of
opening file.
f = open(filename, mode)
1. r open an existing file for read operation. The file pointer is positioned at the
beginning of the file.If the specified file does not exist then we will get
FileNotFoundError.This is default mode.
2. w open an existing file for write operation. If the file already contains some data
then it will be overridden. If the specified file is not already avaialble then this mode will
create that file.
3. a open an existing file for append operation. It won't override existing data.If the
specified file is not already avaialble then this mode will create a new file.
4. r+ To read and write data into the file. The previous data in the file will not be
deleted.The file pointer is placed at the beginning of the file.
6. a+ To append and read data from the file.It wont override existing data.
7. x To open a file in exclusive creation mode for write operation. If the file already
exists then we will get FileExistsError.
Note: All the above modes are applicable for text files. If the above modes suffixed with
'b' then these represents for binary files.
Eg: rb,wb,ab,r+b,w+b,a+b,xb
f = open("abc.txt","w")
Closing a File:
After completing our operations on the file,it is highly recommended to close the file.
For this we have to use close() function.
f.close()
1) f=open("abc.txt",'w')
2) print("File Name: ",f.name)
3) print("File Mode: ",f.mode)
4) print("Is File Readable: ",f.readable())
5) print("Is File Writable: ",f.writable())
6) print("Is File Closed : ",f.closed)
7) f.close()
8) print("Is File Closed : ",f.closed)
9)
10)
11) Output
12) D:\Python_classes>py test.py
13) File Name: abc.txt
14) File Mode: w
15) Is File Readable: False
16) Is File Writable: True
17) Is File Closed : False
18) Is File Closed : True
write(str)
writelines(list of lines)
Eg:
1) f=open("abcd.txt",'w')
2) f.write("Durga\n")
3) f.write("Software\n")
4) f.write("Solutions\n")
5) print("Data written to the file successfully")
6) f.close()
abcd.txt:
Durga
Software
Solutions
Note: In the above program, data present in the file will be overridden everytime if we
run the program. Instead of overriding if we want append operation then we should open
the file as follows.
f = open("abcd.txt","a")
Eg 2:
1) f=open("abcd.txt",'w')
2) list=["sunny\n","bunny\n","vinny\n","chinny"]
3) f.writelines(list)
4) print("List of lines written to the file successfully")
5) f.close()
abcd.txt:
sunny
bunny
vinny
chinny
Note: while writing data by using write() methods, compulsory we have to provide line
seperator(\n),otherwise total data should be written to a single line.
1) f=open("abc.txt",'r')
2) data=f.read()
3) print(data)
4) f.close()
5)
6) Output
7) sunny
8) bunny
9) chinny
10) vinny
1) f=open("abc.txt",'r')
2) data=f.read(10)
3) print(data)
4) f.close()
5)
6) Output
7) sunny
8) bunn
1) f=open("abc.txt",'r')
2) line1=f.readline()
3) print(line1,end='')
4) line2=f.readline()
5) print(line2,end='')
6) line3=f.readline()
7) print(line3,end='')
8) f.close()
9)
10) Output
11) sunny
12) bunny
13) chinny
1) f=open("abc.txt",'r')
2) lines=f.readlines()
3) for line in lines:
4) print(line,end='')
5) f.close()
6)
7) Output
8) sunny
9) bunny
10) chinny
11) vinny
Eg 5:
1) f=open("abc.txt","r")
2) print(f.read(3))
3) print(f.readline())
4) print(f.read(4))
5) print("Remaining data")
6) print(f.read())
7)
8) Output
9) sun
10) ny
11)
12) bunn
13) Remaining data
14) y
15) chinny
16) vinny
1) with open("abc.txt","w") as f:
2) f.write("hii\n")
3) f.write("Soft\n")
4) f.write("\n")
5) print("Is File Closed: ",f.closed)
6) print("Is File Closed: ",f.closed)
7)
8) Output
9) Is File Closed: False
10) Is File Closed: True
tell():
==>We can use tell() method to return current position of the cursor(file pointer) from
beginning of the file. [ can you plese telll current cursor position]
The position(index) of first character in files is zero just like string index.
Eg:
1) f=open("abc.txt","r")
2) print(f.tell())
3) print(f.read(2))
4) print(f.tell())
5) print(f.read(3))
6) print(f.tell())
abc.txt:
sunny
bunny
chinny
vinny
Output:
0
su
2
nny
5
seek():
f.seek(offset, fromwhere)
Note: Python 2 supports all 3 values but Python 3 supports only zero.
Eg:
1) import os,sys
2) fname=input("Enter File Name: ")
3) if os.path.isfile(fname):
4) print("File exists:",fname)
5) f=open(fname,"r")
6) else:
7) print("File does not exist:",fname)
8) sys.exit(0)
9) print("The content of file is:")
10) data=f.read()
11) print(data)
12)
13) Output
14) D:\Python_classes>py test.py
15) Enter File Name: durga.txt
16) File does not exist: durga.txt
17)
18) D:\Python_classes>py test.py
19) Enter File Name: abc.txt
20) File exists: abc.txt
21) The content of file is:
22) All Students are GEMS!!!
23) All Students are GEMS!!!
24) All Students are GEMS!!!
25) All Students are GEMS!!!
26) All Students are GEMS!!!
27) All Students are GEMS!!!
Note:
sys.exit(0) ===>To exit system without executing rest of the program.
argument represents status code . 0 means normal termination and it is the default value.
Q. Program to print the number of lines,words and characters present in the
given file?
1) import os,sys
2) fname=input("Enter File Name: ")
3) if os.path.isfile(fname):
4) print("File exists:",fname)
5) f=open(fname,"r")
6) else:
7) print("File does not exist:",fname)
8) sys.exit(0)
9) lcount=wcount=ccount=0
10) for line in f:
11) lcount=lcount+1
12) ccount=ccount+len(line)
13) words=line.split()
14) wcount=wcount+len(words)
15) print("The number of Lines:",lcount)
16) print("The number of Words:",wcount)
17) print("The number of Characters:",ccount)
18)
19) Output
20) D:\Python_classes>py test.py
21) Enter File Name: durga.txt
22) File does not exist: durga.txt
23)
24) D:\Python_classes>py test.py
25) Enter File Name: abc.txt
26) File exists: abc.txt
27) The number of Lines: 6
28) The number of Words: 24
29) The number of Characters: 149
abc.txt:
1) f1=open("rossum.jpg","rb")
2) f2=open("newpic.jpg","wb")
3) bytes=f1.read()
4) f2.write(bytes)
5) print("New Image is available with the name: newpic.jpg")
As the part of programming,it is very common requirement to write and read data wrt csv
files. Python provides csv module to handle csv files.
with open("emp.csv","w",newline='') as f:
with open("emp.csv","w") as f:
Note: If we are not using newline attribute then in the csv file blank lines will be included
between data. To prevent these blank lines, newline attribute is required in Python-3,but
in Python-2 just we can specify mode as 'wb' and we are not required to use newline
attribute.
Reading Data from csv file:
1) import csv
2) f=open("emp.csv",'r')
3) r=csv.reader(f) #returns csv reader object
4) data=list(r)
5) #print(data)
6) for line in data:
7) for word in line:
8) print(word,"\t",end='')
9) print()
10)
11) Output
12) D:\Python_classes>py test.py
13) ENO ENAME ESAL EADDR
14) 100 Durga 1000 Hyd
15) 200 Sachin 2000 Mumbai
16) 300 Dhoni 3000 Ranchi
To perform zip and unzip operations, Python contains one in-bulit module zip file.
This module contains a class : ZipFile
We have to create ZipFile class object with name of the zip file,mode and constant
ZIP_DEFLATED. This constant represents we are creating zip file.
f = ZipFile("files.zip","w","ZIP_DEFLATED")
Once we create ZipFile object,we can add files by using write() method.
f.write(filename)
Eg:
f = ZipFile("files.zip","r",ZIP_STORED)
ZIP_STORED represents unzip operation. This is default value and hence we are not
required to specify.
Once we created ZipFile object for unzip operation,we can get all file names present in
that zip file by using namelist() method.
names = f.namelist()
Eg:
import os
cwd=os.getcwd()
print("Current Working Directory:",cwd)
import os
os.mkdir("mysub")
print("mysub directory created in cwd")
cwd
|-mysub
|-mysub2
import os
os.mkdir("mysub/mysub2")
print("mysub2 created inside mysub")
Q4. To create multiple directories like sub1 in that sub2 in that sub3:
import os
os.makedirs("sub1/sub2/sub3")
print("sub1 and in that sub2 and in that sub3 directories created")
import os
os.rmdir("mysub/mysub2")
print("mysub2 directory deleted")
import os
os.removedirs("sub1/sub2/sub3")
print("All 3 directories sub1,sub2 and sub3 removed")
Q7. To rename a directory:
import os
os.rename("mysub","newdir")
print("mysub directory renamed to newdir")
os module provides listdir() to list out the contents of the specified directory. It won't
display the contents of sub directory.
Eg:
1) import os
2) print(os.listdir("."))
3)
4) Output
5) D:\Python_classes>py test.py
6) ['abc.py', 'abc.txt', 'abcd.txt', 'com', 'demo.py', 'durgamath.py', 'emp.csv', '
7) file1.txt', 'file2.txt', 'file3.txt', 'files.zip', 'log.txt', 'module1.py', 'myl
8) og.txt', 'newdir', 'newpic.jpg', 'pack1', 'rossum.jpg', 'test.py', ' pycache '
9) ]
The above program display contents of current working directory but not contents of sub
directories.
If we want the contents of a directory including sub directories then we should go for
walk() function.
os.walk(path,topdown=True,onerror=None,followlinks=False)
It returns an Iterator object whose contents can be displayed by using for loop
Note: To display contents of particular directory,we have to provide that directory name
as argument to walk() function.
os.walk("directoryname")
In the case of listdir(), we will get contents of specified directory but not sub directory
contents. But in the case of walk() function we will get contents of specified directory and
its sub directories also.
os.system("commad string")
The argument is any command which is executing from DOS.
Eg:
import os
os.system("dir *.py")
os.system("py abc.py")
How to get information about a File:
We can get statistics of a file like size, last accessed time,last modified time etc by using
stat() function of os module.
stats = os.stat("abc.txt")
st_mode==>Protection Bits
st_ino==>Inode number
st_dev===>device
st_nlink===>no of hard links
st_uid===>userid of owner
st_gid==>group id of owner
st_size===>size of file in bytes
st_atime==>Time of most recent access
st_mtime==>Time of Most recent modification
st_ctime==> Time of Most recent meta data change
Note:
st_atime, st_mtime and st_ctime returns the time as number of milli seconds since Jan 1st
1970 ,12:00AM. By using datetime module fromtimestamp() function,we can get exact
date and time.
1) import os
2) stats=os.stat("abc.txt")
3) print(stats)
4)
5) Output
6) os.stat_result(st_mode=33206, st_ino=844424930132788, st_dev=2657980798, st_nlin
7) k=1, st_uid=0, st_gid=0, st_size=22410, st_atime=1505451446, st_mtime=1505538999
8) , st_ctime=1505451446)
1) import os
2) from datetime import *
3) stats=os.stat("abc.txt")
4) print("File Size in Bytes:",stats.st_size)
5) print("File Last Accessed Time:",datetime.fromtimestamp(stats.st_atime))
6) print("File Last Modified Time:",datetime.fromtimestamp(stats.st_mtime))
7)
8) Output
9) File Size in Bytes: 22410
10) File Last Accessed Time: 2017-09-15 10:27:26.599490
11) File Last Modified Time: 2017-09-16 10:46:39.245394
The process of writing state of object to the file is called pickling and the process of
reading state of an object from the file is called unpickling.
pickle.dump(object,file)
obj=pickle.load(file)
pickling
pickle.dump
eno: 100 (e1, f)
ename: Durga
esal: 10000
eaddr: HYD
e1 eno: 100
ename: Durga
esal: 10000
eaddr: HYD
emp.py:
1) class Employee:
2) def init (self,eno,ename,esal,eaddr):
3) self.eno=eno;
4) self.ename=ename;
5) self.esal=esal;
6) self.eaddr=eaddr;
7) def display(self):
8)
9) print(self.eno,"\t",self.ename,"\t",self.esal,"\t",self.eaddr)
pick.py:
1) import emp,pickle
2) f=open("emp.dat","wb")
3) n=int(input("Enter The number of Employees:"))
4) for i in range(n):
5) eno=int(input("Enter Employee Number:"))
6) ename=input("Enter Employee Name:")
7) esal=float(input("Enter Employee Salary:"))
8) eaddr=input("Enter Employee Address:")
9) e=emp.Employee(eno,ename,esal,eaddr)
10) pickle.dump(e,f)
11) print("Employee Objects pickled successfully")
unpick.py:
1) import emp,pickle
2) f=open("emp.dat","rb")
3) print("Employee Details:")
4) while True:
5) try:
6) obj=pickle.load(f)
7) obj.display()
8) except EOFError:
9) print("All employees Completed")
10) break
11) f.close()
Exception Handling
In any programming language there are 2 types of errors are possible.
1. Syntax Errors
2. Runtime Errors
1. Syntax Errors:
The errors which occurs because of invalid syntax are called syntax errors.
Eg 1:
x=10
if x==10
print("Hello")
Eg 2:
print "Hello"
Note:
Programmer is responsible to correct these syntax errors. Once all syntax errors are
corrected then only program execution will be started.
2. Runtime Errors:
x=int(input("Enter Number:"))
print(x)
D:\Python_classes>py test.py
Note: Exception Handling concept applicable for Runtime Errors but not for syntax errors
What is Exception:
An unwanted and unexpected event that disturbs normal flow of program is called
exception.
Eg:
ZeroDivisionError
TypeError
ValueError
FileNotFoundError
EOFError
SleepingError
TyrePuncturedError
Exception handling does not mean repairing exception. We have to define alternative way
to continue rest of the program normally.
Eg:
For example our programming requirement is reading data from remote file locating at
London. At runtime if london file is not available then the program should not be
terminated abnormally. We have to provide local file to continue rest of the program
normally. This way of defining alternative is nothing but exception handling.
try:
Q. What is an Exception?
Q. What is the purpose of Exception Handling?
Q. What is the meaning of Exception Handling?
Whevever an exception occurs PVM will create the corresponding exception object and
will check for handling code. If handling code is not available then Python interpreter
terminates the program abnormally and prints corresponding exception information to
the console.
The rest of the program won't be executed.
Eg:
1) print("Hello")
2) print(10/0)
3) print("Hi")
4)
5) D:\Python_classes>py test.py
6) Hello
7) Traceback (most recent call last):
8) File "test.py", line 2, in <module>
9) print(10/0)
10) ZeroDivisionError: division by zero
Python's Exception Hierarchy
BaseException
Overflow Permission
Error Error
TimeOut
Error
Most of the times being a programmer we have to concentrate Exception and its child
classes.
without try-except:
1. print("stmt-1")
2. print(10/0)
3. print("stmt-3")
4.
5. Output
6. stmt-1
7. ZeroDivisionError: division by zero
with try-except:
1. print("stmt-1")
2. try:
3. print(10/0)
4. except ZeroDivisionError:
5. print(10/2)
6. print("stmt-3")
7.
8. Output
9. stmt-1
10. 5.0
11. stmt-3
case-3: If an exception raised at stmt-2 and corresponding except block not matched
1, Abnormal Termination
Conclusions:
1. within the try block if anywhere exception raised then rest of the try block wont be
executed eventhough we handled that exception. Hence we have to take only risky code
inside try block and length of the try block should be as less as possible.
2. In addition to try block,there may be a chance of raising exceptions inside except and
finally blocks also.
3. If any statement which is not part of try block raises an exception then it is always
abnormal termination.
1. print(10/0)
2. except ZeroDivisionError as msg:
3. print("exception raised and its description is:",msg)
4.
5. Output exception raised and its description is: division by zero
The way of handling exception is varied from exception to exception.Hence for every
exception type a seperate except block we have to provide. i.e try with multiple except
blocks is possible and recommended to use.
Eg:
try:
-------
-------
-------
except ZeroDivisionError:
perform alternative
arithmetic operations
except FileNotFoundError:
use local file instead of remote file
If try with multiple except blocks available then based on raised exception the
corresponding except block will be executed.
Eg:
1) try:
2) x=int(input("Enter First Number: "))
3) y=int(input("Enter Second Number: "))
4) print(x/y)
5) except ZeroDivisionError :
6) print("Can't Divide with Zero")
7) except ValueError:
8) print("please provide int value only")
9)
10) D:\Python_classes>py test.py
11) Enter First Number: 10
12) Enter Second Number: 2
13) 5.0
14)
15) D:\Python_classes>py test.py
16) Enter First Number: 10
17) Enter Second Number: 0
18) Can't Divide with Zero
19)
20) D:\Python_classes>py test.py
21) Enter First Number: 10
22) Enter Second Number: ten
23) please provide int value only
If try with multiple except blocks available then the order of these except blocks is
important .Python interpreter will always consider from top to bottom until matched
except block identified.
Eg:
1) try:
2) x=int(input("Enter First Number: "))
3) y=int(input("Enter Second Number: "))
4) print(x/y)
5) except ArithmeticError :
6) print("ArithmeticError")
7) except ZeroDivisionError:
8) print("ZeroDivisionError")
9)
10) D:\Python_classes>py test.py
11) Enter First Number: 10
12) Enter Second Number: 0
13) ArithmeticError
We can write a single except block that can handle multiple different types of exceptions.
except (Exception1,Exception2,exception3,..): or
except (Exception1,Exception2,exception3,..) as msg :
Parenthesis are mandatory and this group of exceptions internally considered as tuple.
Eg:
1) try:
2) x=int(input("Enter First Number: "))
3) y=int(input("Enter Second Number: "))
4) print(x/y)
5) except (ZeroDivisionError,ValueError) as msg:
6) print("Plz Provide valid numbers only and problem is: ",msg)
7)
8) D:\Python_classes>py test.py
9) Enter First Number: 10
10) Enter Second Number: 0
11) Plz Provide valid numbers only and problem is: division by zero
12)
13) D:\Python_classes>py test.py
14) Enter First Number: 10
15) Enter Second Number: ten
16) Plz Provide valid numbers only and problem is: invalid literal for int() with b
17) ase 10: 'ten'
Syntax:
except:
statements
Eg:
1) try:
2) x=int(input("Enter First Number: "))
3) y=int(input("Enter Second Number: "))
4) print(x/y)
5) except ZeroDivisionError:
6) print("ZeroDivisionError:Can't divide with zero")
7) except:
8) print("Default Except:Plz provide valid input only")
9)
10) D:\Python_classes>py test.py
11) Enter First Number: 10
12) Enter Second Number: 0
13) ZeroDivisionError:Can't divide with zero
14)
15) D:\Python_classes>py test.py
16) Enter First Number: 10
17) Enter Second Number: ten
18) Default Except:Plz provide valid input only
***Note: If try with multiple except blocks available then default except block should be
last,otherwise we will get SyntaxError.
Eg:
1) try:
2) print(10/0)
3) except:
4) print("Default Except")
5) except ZeroDivisionError:
6) print("ZeroDivisionError")
7)
8) SyntaxError: default 'except:' must be last
Note:
finally block:
2. It is not recommended to maintain clean up code inside except block, because if there
is no exception then except block won't be executed.
Hence we required some place to maintain clean up code which should be executed
always irrespective of whether exception raised or not raised and whether exception
handled or not handled. Such type of best place is nothing but finally block.
try:
Risky Code
except:
Handling Code
finally:
Cleanup code
The speciality of finally block is it will be executed always whether exception raised or not
raised and whether exception handled or not handled.
*** Note: There is only one situation where finally block won't be executed ie whenever
we are using os._exit(0) function.
Whenever we are using os._exit(0) function then Python Virtual Machine itself will be
shutdown.In this particular case finally won't be executed.
1) imports
2) try:
3) print("try")
4) os._exit(0)
5) except NameError:
6) print("except")
7) finally:
8) print("finally")
9)
10) Output
11) try
Note:
os._exit(0)
where 0 represents status code and it indicates normal termination
There are multiple status codes are possible.
Case-2: If an exception raised at stmt2 and the corresponding except block matched
1,4,5,6 Normal Termination
Case-3: If an exception raised at stmt2 but the corresponding except block not matched
1,5 Abnormal Termination
Case-4:If an exception raised at stmt4 then it is always abnormal termination but before
that finally block will be executed.
We can take try-except-finally blocks inside try or except or finally blocks.i.e nesting of try-
except-finally is possible.
try:
----------
----------
----------
try:
-------------
--------------
--------------
except:
--------------
--------------
--------------
------------
except:
-----------
-----------
-----------
General Risky code we have to take inside outer try block and too much risky code we
have to take inside inner try block. Inside Inner try block if an exception raised then inner
except block is responsible to handle. If it is unable to handle then outer except block is
responsible to handle.
Eg:
1) try:
2) print("outer try block")
3) try:
4) print("Inner try block")
5) print(10/0)
6) except ZeroDivisionError:
7) print("Inner except block")
8) finally:
9) print("Inner finally block")
10) except:
11) print("outer except block")
12) finally:
13) print("outer finally block")
14)
15) Output
16) outer try block
17) Inner try block
18) Inner except block
19) Inner finally block
20) outer finally block
case-2: If an exception raised at stmt-2 and the corresponding except block matched
1,10,11,12 Normal Termination
case-3: If an exceptiion raised at stmt-2 and the corresponding except block not matched
1,11,Abnormal Termination
case-5: If an exception raised at stmt-5 and inner except block not matched but outer
except block matched
1,2,3,4,8,10,11,12,Normal Termination
case-6:If an exception raised at stmt-5 and both inner and outer except blocks are not
matched
1,2,3,4,8,11,Abnormal Termination
case-8: If an exception raised at stmt-7 and corresponding except block not matched
1,2,3,.,.,.,8,11,Abnormal Termination
case-10: If an exception raised at stmt-8 and corresponding except block not matched
1,2,3,.,.,.,.,11,Abnormal Termination
case-12: If an exception raised at stmt-9 and corresponding except block not matched
1,2,3,.,.,.,.,8,11,Abnormal Termination
Note: If the control entered into try block then compulsary finally block will be executed.
If the control not entered into try block then finally block won't be executed.
try:
Risky Code
except:
will be executed if exception inside try
else:
will be executed if there is no exception inside try
finally:
will be executed whether exception raised or not raised and handled or not
handled
Eg:
try:
print("try")
print(10/0)--->1
except:
print("except")
else:
print("else")
finally:
print("finally")
If we comment line-1 then else block will be executed b'z there is no exception inside try.
In this case the output is:
try
else
finally
If we are not commenting line-1 then else block won't be executed b'z there is exception
inside try block. In this case output is:
try
except
finally
2. Wheneever we are writing except block, compulsory we should write try block. i.e
except without try is always invalid.
3. Whenever we are writing finally block, compulsory we should write try block. i.e finally
without try is always invalid.
4. We can write multiple except blocks for the same try,but we cannot write multiple
finally blocks for the same try
5. Whenever we are writing else block compulsory except block should be there. i.e
without except we cannot write else block.
7. We can define try-except-else-finally inside try,except,else and finally blocks. i.e nesting
of try-except-else-finally is always possible.
try:
1
print("try")
except:
2
print("Hello")
else:
3
print("Hello")
finally:
4
print("Hello")
try:
print("try")
5
except: √
print("except")
try:
print("try")
6
finally: √
print("finally")
try:
7
print("try") √
except:
print("except")
else:
print("else")
try:
print("try")
8
else:
print("else")
try:
print("try")
else:
9
print("else")
finally:
print("finally")
try:
print("try")
except XXX:
10
print("except-1") √
except YYY:
print("except-2")
try:
print("try")
except :
print("except-1")
11
else:
print("else")
else:
print("else")
try:
print("try")
except :
print("except-1")
12
finally:
print("finally")
finally:
print("finally")
try:
print("try")
13 print("Hello")
except:
print("except")
try:
14 print("try")
except:
print("except")
print("Hello")
except:
print("except")
try:
print("try")
except:
15 print("except")
print("Hello")
finally:
print("finally")
try:
print("try")
except:
16 print("except")
print("Hello")
else:
print("else")
try:
print("try")
except:
print("except")
17
try: √
print("try")
except:
print("except")
try:
print("try")
except:
print("except")
18
try: √
print("try")
finally:
print("finally")
try:
print("try")
except:
print("except")
19
if 10>20:
print("if")
else:
print("else")
try:
20
print("try") √
try:
print("inner try")
except:
print("inner except block")
finally:
print("inner finally block")
except:
print("except")
try:
print("try")
except:
print("except")
21 try:
print("inner try")
√
except:
print("inner except block")
finally:
print("inner finally block")
try:
print("try")
except:
print("except")
finally:
22 try:
print("inner try")
√
except:
print("inner except block")
finally:
print("inner finally block")
try:
print("try")
except:
print("except")
23
try:
print("try")
else:
print("else")
try:
print("try")
try:
24
print("inner try")
except:
print("except")
try:
print("try")
else:
print("else")
25
except:
print("except")
finally:
print("finally")
Types of Exceptions:
In Python there are 2 types of exceptions are possible.
1. Predefined Exceptions
2. User Definded Exceptions
1. Predefined Exceptions:
The exceptions which are raised automatically by Python virtual machine whenver a
particular event occurs, are called pre defined exceptions.
Eg 1: Whenever we are trying to perform Division by zero, automatically Python will raise
ZeroDivisionError.
print(10/0)
Eg 2: Whenever we are trying to convert input value to int type and if input value is not
int value then Python will raise ValueError automatically
x=int("ten")===>ValueError
Some time we have to define and raise exceptions explicitly to indicate that something
goes wrong ,such type of exceptions are called User Defined Exceptions or Customized
Exceptions
Programmer is responsible to define these exceptions and Python not having any idea
about these. Hence we have to raise explicitly based on our requirement by using "raise"
keyword.
Eg:
InSufficientFundsException
InvalidInputException
TooYoungException
TooOldException
Every exception in Python is a class that extends Exception class either directly or
indirectly.
Syntax:
class classname(predefined exception class name):
def init (self,arg):
self.msg=arg
Eg:
1) class TooYoungException(Exception):
2) def init (self,arg):
3) self.msg=arg
Eg:
1) class TooYoungException(Exception):
2) def init (self,arg):
3) self.msg=arg
4)
5) class TooOldException(Exception):
6) def init (self,arg):
7) self.msg=arg
8)
9) age=int(input("Enter Age:"))
10) if age>60:
11) raise TooYoungException("Plz wait some more time you will get best match soon!!!")
12) elif age<18:
13) raise TooOldException("Your age already crossed marriage age...no chance of getting ma
rriage")
14) else:
15) print("You will get match details soon by email!!!")
16)
17) D:\Python_classes>py test.py
nd
18) Enter Age:90
19) main .TooYoungException: Plz wait some more time you will get best match soon!!!
20)
21) D:\Python_classes>py test.py
22) Enter Age:12
23) main .TooOldException: Your age already crossed marriage age...no chance of g
24) etting marriage
25)
26) D:\Python_classes>py test.py
27) Enter Age:27
28) You will get match details soon by email!!!
Note:
raise keyword is best suitable for customized exceptions but not for pre defined
exceptions