python-3.x - 使用try-except语句打印错误结果的错误处理

标签 python-3.x error-handling path

我有一个程序,在其中读取文件的路径并将其另存为变量,以便以后打开和访问文件。文件名可能会稍有不同,即为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将目录和文件字符串安全地连接在一起。

关于python-3.x - 使用try-except语句打印错误结果的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56441413/

相关文章:

apache - 返回特定目录下丢失文件的404

java - 从/src/main/resources/读取文件

python - 从不一致分隔的 csv 文件返回特定值

python - 正整数位移产生负整数......这怎么会发生?

django - 将服务器错误显示为html

angular - HttpClient错误处理程序中的 Angular 调用自定义函数

emacs - 在elisp中获取当前弹丸根路径

Android 不被识别为内部或外部命令 - 路径变量

python - 在 Windows 中设置 python 3 环境的简单方法 : just install from python. org,或者真的会从 miniconda 或类似的东西中受益吗?

python-3.x - DataFrame' 对象没有属性 'sort'