python:使用错误消息改进函数的最佳方法

时间:2012-12-21 12:19:57

标签: python performance error-handling coding-style

我希望改进以下功能。给定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

我希望在函数中插入一条错误消息,如果您输入的dataType不同,则会显示错误消息:

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

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

2 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分:0)

您可以将return语句放在try块中并捕获任何异常或者您可以创建default dictionary并将所有值放在default dictionary中。default dictionary返回0元素不存在。

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

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时打印错误消息。这可以帮助您设置自己的自定义错误消息或执行您可能需要的任何其他处理做