[英]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.