– Start
点击此处观看本系列配套视频。
什么是异常?
我们都知道 0 不能是除数,你有没有试过在 Python 中除以 0 会发生什么呢?它会抛出下面的异常,导致程序终止。
ZeroDivisionError: division by zero
为什么要捕获异常?
为了能够使程序继续运行,我们需要捕获异常。我们 Python 使用 try … except
def div(x,y):
try:
r = x/y
print(r)
return r
except ZeroDivisionError:
print('y cannot be zero')
return None
# call div
r = div(5, 0)
print(r)
在 try 块中,任何代码发生异常,代码将跳转到 except 块中,except 中的代码用来处理异常,处理异常后,程序继续运行,不会终止。
finally
有时候,执行完一段代码后,无论有没有异常,我们都需要释放资源,如,关闭数据库连接,关闭文件等,我们可以使用 try … except … finally
def div(x,y):
try:
r = x/y
print(r)
return r
except ZeroDivisionError:
print('y cannot be zero')
return None
finally:
print('aleays run')
# call div
r = div(5, 0)
print(r)
except
事实上,except 块可以有多个。
def div(x,y):
try:
r = x/y
print(r)
return r
except ZeroDivisionError:
print(f'oops div failed with error {te.args}')
return None
except TypeError as te:
print(f'oops div failed with error {te.args}')
return None
finally:
print('aleays run')
# call div
r = div(5, 'not a number')
print(r)
else
和循环语句类似,try 语句还可以有一个 else 子句,它只有在没有异常时执行。
def div(x,y):
try:
r = x/y
print(r)
except ZeroDivisionError:
print('y cannot be zero')
return None
else:
print('good news, no exception happened')
return r
# call div
r = div(5, 1)
print(r)
Python 内置异常及异常继承结构
请参考官方**文档**。
自定义异常
任何实际的代码都是为了实现业务逻辑,为了实现业务逻辑,我们可能需要进行必要的验证,如下面代码模拟了转账,当账户余额不足时抛出异常。
# 自定义异常
class InsufficientBalanceError(Exception):
pass
# 定义账户类
class Account:
def __init__(self, name, balance):
self.name = name
self.balance = balance
def transfer(self, amount):
if self.balance < amount:
# 余额不足,抛出异常
raise InsufficientBalanceError
else:
self.balance = self.balance - amount
# 测试
myAccount = Account('shangbo', 100)
myAccount.transfer(101)
– 更多参见:Python 精萃
– 声 明:转载请注明出处
– Last Updated on 2018-11-04
– Written by ShangBo on 2018-08-23
– End