Python中的異常處理和Java中的類似,看下代碼:
try:
s = input('please enter two numbers separated by comma: ')
num1 = int(s.split(',')[0].strip())
num2 = int(s.split(',')[1].strip())
except ValueError as err:
print('Value Error: {}'.format(err))
except IndexError as err:
print('Index Error: {}'.format(err))
except Exception as err:
print('Other error: {}'.format(err))
finally:
print('finally')
print('continue')
當程序存在多個 except block時,最多只有一個 except block會被執(zhí)行。如果存在多個匹配的,只有最前面的except block會被執(zhí)行,其他則被忽略。
finally:無論什么情況下,finally中的語句都會被執(zhí)行,即使前面的 try 和 except block中使用了 return 語句。
自定義異常
我們可以創(chuàng)建自己的異常類型。
class MyInputError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return ("{} is valid input".format(self.value))
try:
raise MyInputError(1)
except MyInputError as err:
print('error: {}'.format(err))
error: 1 is valid input
異常使用場景
通常來說,在程序中,如果我們不確定某段代碼能否執(zhí)行成功,這個地方就需要使用異常處理。
比如將json字符串轉(zhuǎn)json,如果字符串不符合格式要求,可能會報錯,這時候,可以添加try/except,但是異常也不能濫用。