0

我希望改进以下功能。给定GDAL中的像素数据类型(例如:“Int16”)返回代码编号。

def GDAL_data_type(dataType):
    dtypes = {
        "Unknown": 0,
        "Byte": 1,
        "UInt16": 2,
        "Int16": 3,
        "UInt32": 4,
        "Int32": 5,
        "Float32": 6,
        "Float64": 7,
        "CInt16": 8,
        "CInt32": 9,
        "CFloat32": 10,
        "CFloat64": 11
        }
    return dtypes[dataType]

GDAL_data_type("Int16")
3

我希望在函数中插入一条错误消息,如果您键入不同的数据类型,错误消息会说:

raise SystemExit('Pixel data type no recognized %s' % dataType)

我想问在我的函数中插入此错误消息的最佳方法。提前致谢

4

2 回答 2

4

将字典查找包装在 try 块中,捕获 keyerror 异常,并从 catch 块中引发您自己的异常:

try:
  return dtypes[dataType]
except KeyError:
  raise ...

编辑

或者更全面:

def GDAL_data_type(dataType):
    dtypes = {
        "Unknown": 0,
        "Byte": 1,
        "UInt16": 2,
        "Int16": 3,
        "UInt32": 4,
        "Int32": 5,
        "Float32": 6,
        "Float64": 7,
        "CInt16": 8,
        "CInt32": 9,
        "CFloat32": 10,
        "CFloat64": 11
        }
    try:
        return dtypes[dataType]
    except KeyError:
        raise ...
于 2012-12-21T12:24:19.543 回答
0

您可以将 return 语句放在 try 块中并捕获任何异常,或者您可以创建 adefault dictionary并将所有值放在default dictionary.The中,default dictionary如果元素不存在则返回零。

您可以像这样初始化默认字典

from collections import defaultdict
dtypes=defaultdict(int)
dtypes.update({
        "Unknown": 0,
        "Byte": 1,
        "UInt16": 2,
        "Int16": 3,
        "UInt32": 4,
        "Int32": 5,
        "Float32": 6,
        "Float64": 7,
        "CInt16": 8,
        "CInt32": 9,
        "CFloat32": 10,
        "CFloat64": 11
        })

您可以使用该get()方法检索该值。如果您尝试检查字典中没有的值,它将返回0,您可以检查它是否返回零并打印错误消息

例子:

dtypes.get("Int16",0)将返回 3

dtypes.get("xyz",0)将返回 0,因为 0 被设置为默认值,当找不到键时返回

您可以使用if条件来检查值并打印错误消息(如果是0)。这将帮助您设置自己的自定义错误消息或执行您可能需要执行的任何其他处理

于 2012-12-21T12:43:39.940 回答