0

以下の機能を改善したい。GDALの Pixel データ型(例: "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ブロックに入れて例外をキャッチするか、を作成してdefault dictionaryすべての値をに入れることができますdefault dictionarydefault 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が返され、0 が返されるかどうかをチェックしてエラー メッセージを出力できます。

例:

dtypes.get("Int16",0)3を返します

dtypes.get("xyz",0)キーが見つからない場合に返されるデフォルト値として 0 が設定されているため、0 が返されます。

条件を使用ifして値をチェックし、その場合はエラー メッセージ0を出力できます。これは、独自のカスタム エラー メッセージを設定したり、必要なその他の処理を行うのに役立ちます。

于 2012-12-21T12:43:39.940 に答える