次のよう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ですか?