How to create file exception for multiple file analysis in Python
Question: I am analysing a large set of weather data (about 13000 files) and writing the
results to a file. Is there a way of implementing the code I have below in
such a way that it will ignore problematic files, that is, if a particular
file produces an error, can I make it skip this file and continue on to the
rest? Some sort of exception for glob? Files are in .oax format and output
file is .txt.

Around which segments would I need to include the try and exception commands?

    
    
    import sharppy
    import sharppy.sharptab.profile as profile
    import sharppy.sharptab.interp as interp
    import sharppy.sharptab.winds as winds
    import sharppy.sharptab.utils as utils
    import sharppy.sharptab.params as params
    import sharppy.sharptab.thermo as thermo
    import numpy as np
    from StringIO import StringIO
    import glob
    import os
    
    
    os.chdir('X:/ybbn_snding_data-oax/ybbn_snding_data-oax')
    for file in glob.glob("*.oax"):
        spc_file = open(file, 'r').read()
    
    
        def parseSPC(spc_file):
        ## read in the file
        data = np.array([l.strip() for l in spc_file.split('\n')])
    
        ## necessary index points
        title_idx = np.where( data == '%TITLE%')[0][0]
        start_idx = np.where( data == '%RAW%' )[0] + 1
        finish_idx = np.where( data == '%END%')[0]
    
        ## create the plot title
        data_header = data[title_idx + 1].split()
        location = data_header[0]
        time = data_header[1][:11]
    
        ## put it all together for StringIO
        full_data = '\n'.join(data[start_idx : finish_idx][:])
        sound_data = StringIO( full_data )
    
        ## read the data into arrays
        p, h, T, Td, wdir, wspd = np.genfromtxt( sound_data, delimiter=',', comments="%", unpack=True )
    
        return p, h, T, Td, wdir, wspd
    
    pres, hght, tmpc, dwpc, wdir, wspd = parseSPC(spc_file)
    
    prof = profile.create_profile(profile='default', pres=pres, hght=hght, tmpc=tmpc, \
                                        dwpc=dwpc, wspd=wspd, wdir=wdir, missing=-9999, strictQC=True)
    msl_hght = prof.hght[prof.sfc] # Grab the surface height value
    #print "SURFACE HEIGHT (m MSL):",msl_hght
    agl_hght = interp.to_agl(prof, msl_hght) # Converts to AGL
    #print "SURFACE HEIGHT (m AGL):", agl_hght
    msl_hght = interp.to_msl(prof, agl_hght) # Converts to MSL
    #print "SURFACE HEIGHT (m MSL):",msl_hght
    sfcpcl = params.parcelx( prof, flag=1 ) # Surface Parcel
    fcstpcl = params.parcelx( prof, flag=2 ) # Forecast Parcel
    mupcl = params.parcelx( prof, flag=3 ) # Most-Unstable Parcel
    mlpcl = params.parcelx( prof, flag=4 ) # 100 mb Mean Layer Parcel
    print mupcl.bplus, "," # J/kg
    print mupcl.bminus, "," # J/kg
    print mupcl.lclhght, "," # meters AGL
    print mupcl.lfchght, "," # meters AGL
    print mupcl.elhght, "," # meters AGL
    print mupcl.li5, "," # C
    sfc = prof.pres[prof.sfc]
    p3km = interp.pres(prof, interp.to_msl(prof, 3000.))
    p6km = interp.pres(prof, interp.to_msl(prof, 6000.))
    p1km = interp.pres(prof, interp.to_msl(prof, 1000.))
    mean_3km = winds.mean_wind(prof, pbot=sfc, ptop=p3km)
    sfc_6km_shear = winds.wind_shear(prof, pbot=sfc, ptop=p6km)
    sfc_3km_shear = winds.wind_shear(prof, pbot=sfc, ptop=p3km)
    sfc_1km_shear = winds.wind_shear(prof, pbot=sfc, ptop=p1km)
    print utils.comp2vec(mean_3km[0], mean_3km[1])[1], ","
    print utils.comp2vec(sfc_6km_shear[0], sfc_6km_shear[1])[1], ","
    srwind = params.bunkers_storm_motion(prof)
    #print "Bunker's Storm Motion (right-mover) [deg,kts]:", utils.comp2vec(srwind[0], srwind[1])
    #print "Bunker's Storm Motion (left-mover) [deg,kts]:", utils.comp2vec(srwind[2], srwind[3])
    srh3km = winds.helicity(prof, 0, 3000., stu = srwind[0], stv = srwind[1])
    srh1km = winds.helicity(prof, 0, 1000., stu = srwind[0], stv = srwind[1])
    print srh3km[0], ","
    stp_fixed = params.stp_fixed(sfcpcl.bplus, sfcpcl.lclhght, srh1km[0], utils.comp2vec(sfc_6km_shear[0], sfc_6km_shear[1])[1])
    ship = params.ship(prof)
    eff_inflow = params.effective_inflow_layer(prof)
    ebot_hght = interp.to_agl(prof, interp.hght(prof, eff_inflow[0]))
    etop_hght = interp.to_agl(prof, interp.hght(prof, eff_inflow[1]))
    print ebot_hght, ","
    print etop_hght, ","
    effective_srh = winds.helicity(prof, ebot_hght, etop_hght, stu = srwind[0], stv = srwind[1])
    print effective_srh[0], ","
    ebwd = winds.wind_shear(prof, pbot=eff_inflow[0], ptop=eff_inflow[1])
    ebwspd = utils.mag( ebwd[0], ebwd[1] )
    print ebwspd, ",a"
    scp = params.scp(mupcl.bplus, effective_srh[0], ebwspd)
    stp_cin = params.stp_cin(mlpcl.bplus, effective_srh[0], ebwspd, mlpcl.lclhght, mlpcl.bminus)
    #print "Supercell Composite Parameter:", scp
    #print "Significant Tornado Parameter (w/CIN):", stp_cin
    #print "Significant Tornado Parameter (fixed):", stp_fixed
    f = open('nonstormdayvalues.txt','a')
    a=str(mupcl.bplus)    
    f.write(a) 
    f.write(",")
    b=str(mupcl.bminus)
    f.write(b)
    f.write(",")
    c=str(mupcl.lclhght)
    f.write(c)
    f.write(",")
    d=str(mupcl.elhght)
    f.write(d)
    f.write(",")
    e=str(mupcl.li5)
    f.write(e)
    f.write(",")
    g=str(utils.comp2vec(mean_3km[0], mean_3km[1])[1])
    f.write(g)
    f.write(",")
    h=str(utils.comp2vec(sfc_6km_shear[0], sfc_6km_shear[1])[1])    
    f.write(h)
    f.write(",")
    i=str(srh3km[0])
    f.write(i)
    f.write(",")
    j=str(ebot_hght)
    f.write(j)
    f.write(",")
    k=str(etop_hght)
    f.write(k)
    f.write(",")
    l=str(effective_srh[0])
    f.write(l)
    f.write(",")
    m=str(ebwspd)
    f.write(m)
    f.write(",a")
    f.close
    


Answer: Use

    
    
    try:
        #run something
        #if some file is a bad file/ operation not allowed
        #raises exception
    except Exception as e:
        #print e
        #or do something else if error raised
    

You can use this in a loop if some error is raised it excepts and continue to
loop

