🐍
Pythonで except not in (A, B) とは書けませんか?
試したこと
class MindError(Exception): pass
class BodyError(Exception): pass
try:
raise MindError("精神をもっと集中してください")
except not in (MindError, BodyError) as e:
raise e
# なにも raise されずに後続処理が行われることを期待
動かしてみた結果はこうなりました
SyntaxError: invalid syntax
うまく動きませんでした。なので、こう変えてみました
class MindError(Exception): pass
class BodyError(Exception): pass
IGNORE_EXCEPTIONS = (MindError, BodyError)
def dosomething(error: Exception):
try:
raise error
except Exception as e:
if isinstance(e, IGNORE_EXCEPTIONS):
print(f"{type(e).__name__}が起きましたが無視します")
else:
raise e
出力を確認してみます。
>>> dosomething(ValueError("想定外の値です"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in dosomething
File "<stdin>", line 3, in dosomething
ValueError: 想定外の値です
>>> dosomething(MindError("精神をもっと集中してください"))
MindErrorが起きましたが無視します
いや、別にそんな風にかかなくても、こんな感じでよさそう
class MindError(Exception): pass
IGNORE_EXCEPTIONS = (MindError, BodyError)
def dosomething(error: Exception):
try:
raise error
except IGNORE_EXCEPTIONS as e:
print(f"{type(e).__name__}が起きましたが無視します")
except Exception as e:
# なにかしたいことをする
raise e
Discussion