I am trying to catch error on file input/output. The try functions works fine but as it pass to the next line my code breaks. How can I exit gracefully when the 'infile' doesnt exist?

try:
    infile = open ('Book1.txt', "r")
    
    
except IOError:
    print "input file %s is missing" %'Book1.txt'


tex1 = infile.readline()
outfile = open ('Book11.txt', "w")
while tex1:
    rfields = tex1.split()

    # do something


    print >> outfile, 'something'


outfile.close()
infile.close()

the error message I got:

input file Book1.txt is missing
Traceback (most recent call last):
File "D:\pythonLearing\trial.py", line 11, in <module>
tex1 = infile.readline()
NameError: name 'infile' is not defined

Thank you in advance.

Put the code under the try or in a function and call the function under the try

def read_file(infile):
    tex1 = infile.readline()
    outfile = open ('Book11.txt', "w")
    while tex1:
        rfields = tex1.split()

    # do something


    print >> outfile, 'something'


    outfile.close()
    infile.close()

try:
    infile = open ('Book1.txt', "r")
    read_file(infile)
    
except IOError:
    print "input file %s is missing" %'Book1.txt'
except:
    print "Some other error"

else part of try is for the case of no exception happened, there is exit function and same you can do also by raising SystemExit, using function like above is also good idea to organize code. You can raise exception in function and handle it in calling function if you end except with raise.

Thanks a lot. That was a great help

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.