A lot of things can go wrong when you try to read and write files. If you try to open a file that doesn’t exist, you get an
>>> fin = open('bad_file') IOError: [Errno 2] No such file or directory: 'bad_file'
If you don’t have permission to access a file:
>>> fout = open('/etc/passwd', 'w') IOError: [Errno 13] Permission denied: '/etc/passwd'
And if you try to open a directory for reading, you get
>>> fin = open('/home') IOError: [Errno 21] Is a directory
To avoid these errors, you could use functions like
os.path.isfile, but it would take a lot of time and code to check all the possibilities (if
“Errno 21” is any indication, there are at least 21 things that can go wrong).
It is better to go ahead and try—and deal with problems if they happen—which is exactly what the
try statement does. The syntax is similar to an
try: fin = open('bad_file') for line in fin: print line fin.close() except: print 'Something went wrong.'
Python starts by executing the
try clause. If all goes well, it skips the
except clause and proceeds. If an exception occurs, it jumps out of the
try clause and executes the
Handling an exception with a
try statement is called catching an exception. In this example, the
except clause prints an error message that is not very helpful. In general, catching an exception gives you a chance to fix the problem, or try again, or at least end the program gracefully.
Write a function called
sed that takes as arguments a pattern string, a replacement string, and two filenames; it should read the first file and write the contents into the second file (creating it if necessary). If the pattern string appears anywhere in the file, it should be replaced with the replacement string.
If an error occurs while opening, reading, writing or closing files, your program should catch the exception, print an error message, and exit.