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是一个空语句,这是为了保持程序结构的完整性,不会做任何事,只用于占位。

 

posted @ 2021-11-30 15:48  头发重要  阅读(139)  评论(0)    收藏  举报