1

次のようtry/exceptに a を返すかキャッチする句があります。KeyError

try:
    return super().__new__(globals()[kls])
except KeyError:
    raise

次のように不適切に使用すると、スタック トレースが生成されます。

>>> g = Grid(cell='Circle')
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    g = Grid(cell='Circle')
  File "<pyshell#1>", line 8, in __new__
    return super().__new__(globals()[kls])
KeyError: 'SHPCircleGrid'
>>> g
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    g
NameError: name 'g' is not defined

それはまったく問題ありませんが、メッセージを「拡張/変更」して、このエラーを再度回避する方法をユーザーに説明したいと思います。つまり、次から移動します。

KeyError: 'SHPCircleGrid'

KeyError: 'SHPCircleGrid'. Use 'Hex', 'Rect' or 'Tri' for cell keyword.

ユーザーのスタックを維持しながら。私が望んでいないprint()キャッチ部分セットのジェネリックなので、単に印刷するだけではこれを処理することはできません。別のものを追加すると、2 つのスタック ("while handling exception another..." メッセージ) が出力されますが、これも望ましくありません。gNoneTyperaise KeyError('some message')

クラスのインスタンス化がスローする可能性のある追加のキーワードに拡張できるように、これを処理する適切な方法は何KeyErrorですか?

4

1 に答える 1