簡體   English   中英

使用try-except語句打印錯誤結果進行錯誤處理

[英]Error handling using try-except statement printing error result

我有一個程序,我在一個文件的路徑中讀取並將其保存為變量,以便稍后打開和訪問該文件。 文件名可以略有不同,因為它可以是S2A_TOA_rad_10m_atm.bsq或S2B_TOA_rad_10m_atm.bsq。

目前,我已經設置了一個try-except語句,它將捕獲屬性錯誤,如下所示:

try:
    dataset_10m = str(dataset)+'S2A_TOA_rad_10m_atm.bsq'
    dataset_20m = str(dataset)+'S2A_TOA_rad_20m_atm.bsq'
    dataset_mask = str(dataset)+'S2A_TOA_rad_10m_out_hcw.bsq'
    driver,metadata,EPSG_coords,wkt_start,wkt_end = get_metadata(dataset_10m)
except AttributeError:
    dataset_10m = str(dataset)+'S2B_TOA_rad_10m_atm.bsq'
    dataset_20m = str(dataset)+'S2B_TOA_rad_20m_atm.bsq'
    dataset_mask = str(dataset)+'S2B_TOA_rad_10m_out_hcw.bsq'
    driver,metadata,EPSG_coords,wkt_start,wkt_end = get_metadata(dataset_10m)

其中變量數據集是包含.bsq文件的文件夾的路徑。 這段代碼按照我的預期工作,但是當找到以S2B開頭的文件時(即使代碼本身正確實現),會打印出不同的錯誤消息,我無法找到解決方法:

ERROR 4: /*path to folder*/S2A_TOA_rad_10m_atm.bsq: No such file or directory

這似乎不一定是Python錯誤,但我無法找到關於此錯誤消息是什么或如何擺脫它的任何細節。 這是處理文件中次要名稱差異的最佳方法嗎?

當我嘗試打開文件(在get_metadata函數中)然后導致異常子句時,是否會在try-except語句中稍后發生此錯誤?

編輯

def get_metadata(filename):
    '''
    Runs gdalinfo on the input file and gathers the required metadata for creating the .yaml file
    '''

    metadata = gdal.Info(filename)
    metadata = metadata.split('\n')

    for line in range(len(metadata)):
        if metadata[line][0:6] == 'Driver':
            driver = metadata[line][8:12]

        if metadata[line][0:10] == 'Upper Left':
            splitline = metadata[line].split(' ')
            ul_lon_EPSG = int(splitline[5][:-5])
            ul_lat_EPSG = int(splitline[6][:-5])
        if metadata[line][0:10] == 'Lower Left':
            splitline = metadata[line].split(' ')
            ll_lon_EPSG = int(splitline[5][:-5])
            ll_lat_EPSG = int(splitline[6][:-5])
        if metadata[line][0:11] == 'Upper Right':
            splitline = metadata[line].split(' ')
            ur_lon_EPSG = int(splitline[4][:-5])
            ur_lat_EPSG = int(splitline[5][:-5])
        if metadata[line][0:11] == 'Lower Right':
            splitline = metadata[line].split(' ')
            lr_lon_EPSG = int(splitline[4][:-5])
            lr_lat_EPSG = int(splitline[5][:-5])

        if metadata[line][0:21] == 'Coordinate System is:':
            wkt_start = line+1
        if metadata[line][0:6] == 'Origin':
            wkt_end = line

    EPSG_coords = [[ll_lon_EPSG,ll_lat_EPSG],[lr_lon_EPSG,lr_lat_EPSG],[ul_lon_EPSG,ul_lat_EPSG],[ur_lon_EPSG,ur_lat_EPSG]]
    return driver,metadata,EPSG_coords,wkt_start,wkt_end

最后,我用以下四行替換了try / except語句:

dataset_10m = os.path.join(dataset,glob.glob(dataset+'S2?_TOA_rad_10m_atm.bsq')[0])
dataset_20m = os.path.join(dataset,glob.glob(dataset+'S2?_TOA_rad_20m_atm.bsq')[0])
dataset_mask = os.path.join(dataset,glob.glob(dataset+'S2?_TOA_rad_10m_out_hcw.bsq')[0])
driver,metadata,EPSG_coords,wkt_start,wkt_end = get_metadata(dataset_10m)

由於目錄中只有一個文件,從“S2A”或“S2B”開始,帶有通配符的glob.glob函數確定哪一個存在,然后os.path.join安全地將目錄和文件串連接在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM