pythonで1行の例外処理文を実行することはできません。これを行う関数を書くことができます。
def safe_execute(default, exception, function, *args):
try:
return function(*args)
except exception:
return default
使用例:
from json import loads
safe_execute("Oh no, explosions occurred!", TypeError, loads, None)
# Returns "Oh no, explosions occurred!"
safe_execute("Huh?", TypeError, int, "10")
#Returns 10
複数の引数が
from operator import div
safe_execute(
"Divsion by zero is invalid.",
ZeroDivisionError,
div, 1, 0
)
# Returns "Divsion by zero is invalid."
safe_execute(
"Divsion by zero is invalid.",
ZeroDivisionError,
div, 1, 1
)
# Returns 1.
をサポートしているエラーを引くプロセスはまだ中断されることがあります。
from time import sleep
safe_execute(
"Panic!",
Exception,
sleep, 8
)
# Ctrl-c will raise a KeyboardInterrupt
from sys import exit
safe_execute("Failed to exit!", Exception, exit)
# Exits the Python interpreter
この動作が望ましくない場合には、 BaseException
を使用します。
from time import sleep
safe_execute("interrupted",
BaseException,
sleep, 8)
#Pressing Ctrl-c will return "interrupted"
from sys import exit
safe_execute("Naughty little program!",
BaseException,
exit)
#Returns "Naughty little program!"
機能に標準 'try..except'を入れていないのはなぜ? – TigerhawkT3
@Slayer興味深いことに、Pythonは実際には文字列(または実際には他のオブジェクト)を 'or'の「代替」として使用します。 '0 'または'存在しません。 '' 'は存在しません。''。 (私はそれをテストしました) – 2Cubed
@ TigerhawkT3私は 'divide_one_by'関数の内部へのアクセス権がありません。依存関係として使用している別のモジュールで定義されていると仮定します。 – 2Cubed