python: лучший способ улучшить функцию с сообщением об ошибке

Я хочу улучшить следующую функцию. С учетом типов данных Pixel в 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 ответа

Решение

Оберните поиск по словарю в блоке 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 ...

Вы можете либо поместить оператор return в блок try и перехватить любое исключение, либо создать default dictionary и положить все значения в default dictionary.Отель 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Это поможет вам установить собственное сообщение об ошибке или выполнить любую другую обработку, которая вам может потребоваться

Другие вопросы по тегам