python异常机制(一)
异常机制是指对程序运行过程中出现错误而进行处理操作,一般情况下,程序在运行中出现错误会停止运行并发送错误信息,倘若在程序中加入异常机制,当程序运行中出现错误的时候,它会捕捉错误信息并执行相应的处理,这样使程序继续保持运行状态。
异常是程序在执行过程中出现问题导致程序无法执行,如程序的逻辑或者算法错误,计算机的资源不足或IO错误。无论是哪种异常,只要程序在运行中出现错误都可以认为是异常,并且抛出异常信息,我们可以根据异常信息了解异常的具体信息.
Python异常机制语法:
try :
#程序运行的代码
except NameError as err:
#只捕捉NameError的错误类型
print('错误啦,错误信息是: ', err)
expect Exception as err:
#捕捉全部的错误类型
print('错误啦,错误信息是:', err)
expect:
#捕捉全部的错误类型,但没有错误信息
print('错误啦')
else:
print('如果没有异常就执行此处代码')
finally:
print('不管是否有异常都会执行此处代码')
完整的异常机制语法由4个关键词组成:try,expect,else,finally。每个关键词都有不同的作用,其中关键词try和expect是必不可少的,else和finally可以根据实际需求来决定是否添加。说明如下:
try:用于监测程序代码是否出现异常, 监测的代码可以是程序的全部代码或者程序的部分代码。
except: 用于捕捉异常信息并对异常进行处理, 若关键词后面设置异常类型, 在捕捉过程中根据异常类型而选择相应的except,
else:如果关键饲try的代码里面没有出现异常, 程序就会执行此关键词里面的代码。
finally: 不管关键词句try是否出现异常, 当关键词try、 except或else的代码执行完成后, 最终程序会自动执行此关键词里面的代码。
我们通过一个简单的例子来说明使用异常机制,代码如下:
if __name__ = '__main__':
try:
s = Student('lucy')
pass
expect NameError as err:
print('这是NameError错误,错误信息是:',err)
expect Exception as err:
print('这是Exception错误,错误信息是: ',err)
else:
print('如果没有异常机制就执行此处代码')
finally:
print('不管是否有异常都会执行此处代码')
由于Student是未定义的变量或对象,因此程序在运行过程中出现NameError异常,异常信息会被expect NameError as err所捕捉并执行相应的处理,最后程序还会执行关键词finally里面的代码。
若将expect NameError as err 及其代码删除或注释后,当程序再次出现NameError异常,它会被expect Exception as err所捕捉并处理。这说明在一个异常机制中, 如果设置多个关键词except, 当出现异常的时候, 异常捕捉是从上至下执行, 只要符合其中一个捕捉条件, 程序就会执行该except里面的代码。
此外,一个异常机制可以支持多个异常机制的嵌套,但是嵌套过多会使代码结构变得复杂,不利于维护阅读。异常机制嵌套如下:
if __name__ = '__main__':
try:
s = Student('lucy')
expect Exception as err:
try:
print('这是第一个Exception错误,错误信息是:',err)
s = Student('lucy')
expect Exception as error:
print('这是第二个Exception错误,错误信息是: ',err)
自定义异常
异常一般是由程序在运行过程中遇到错误的时候生成的,但有时候我们也需要自己抛出一些异常信息, 让程序去捕捉和处理。 自定义异常抛出除了监测错误之外, 还可以用于代码的布局设计和程序的逻辑控制, 通过抛出异常可以执行不同的代码块。 自定义异常抛出由关键词 raise 实现, 关键词后面填写异常的类型及异常信息, 具体示例如下:
if __name__ = '__main__':
try:
raise NameError('自定义异常抛出')
expect Exception as err:
print('这是Exception错误,错误信息是:',err)
上述示例是我们主动抛出NameError异常, NameError是己定义好的异常类。 如果在自定义异常抛出或异常捕捉的时候不想使用 Python 内置的异常类, 可以自定义一个异常类,只要将自定义异常类继承Exception 类即可。 在自定义抛出异常或异常捕捉的时候, 在关键词 raise 或 except 后面写上自定义异常类型即可, 具体示例代码如下:
#自定义异常类型
class MyError(Exception):
pass
if __name__ == '__main__':
try:
#抛出自定义异常
raise MyError('自定义异常抛出')
#捕捉自定义异常类
expect MyError as err:
print('这是MyError错误,错误信息是:',err)
在定义异常类MyError中,代码中的pass是一个空语句,这是为了保持程序结构的完整性,不会做任何事,只用于占位。

浙公网安备 33010602011771号