Python之异常处理

一,异常处理

         异常是Python程序在运行过程中引发的错误.如果程序中引发了未进行处理的异常,脚本就会由于异常而终止运行.

      1.1异常处理的基本语法

try:
    代码块(可能出现错误的语句)
#如果expect后不跟任何内容,则此时它会捕获到所有的异常
#如果在except后跟着一个异常的类型,那么此时它只会捕获该类型的异常
# Exception 是所有异常类的父类,所以如果except后跟的是Exception,他也会捕获到所有的异常
# 可以在异常类后边跟着一个 as xx 此时xx就是异常对象
except 异常类型 as 异常名:
    代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
    代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
    代码块(出现错误以后的处理方式)
else:
    代码块(没出错时要执行的语句)    
finally:
    代码块(该代码块总会执行)
注: ①try是必须的,else有没有都行,except和finally至少有一个.
     ②Python所有的错误都是BaseException类派生的,常见的错误类型和继承关系看这里:
    https://docs.python.org/3/library/exceptions.html#exception-hierarchy
#expect语句主要有以下几种用法
   

except: #捕获所有异常
except: <异常名>: #捕获指定异常
except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2
except:<异常名>,<数据>:捕获指定异常及其附加的数据
except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据

 

二 手工抛出异常

  2.1 异常的传播

   当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播;
              如果函数中没有对异常进行处理,则异常会继续向函数调用处传播;
              如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播;
              直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息.

  2.2用raise手工抛出异常

      raise 异常名
      raise 异常名,附加数据
      raise 类名

  2.3 assert语句

  Python提供了一个断言语句assert expression,断定表达式expression成立,否则触发异常AssertionError

     assert语法如下: 
            assert <条件测试>,<异常附加数据>
age='18'

# 若表达式isinstance(age,int)返回值为False则触发异常AssertionError
assert isinstance(age,int)

# 等同于
if not isinstance(age,int):
    raise AssertionError
assert

 

  2.4 自定义异常类

            只需要创建一个类继承Exception即可
class PoolEmptyError(Exception): # 可以通过继承Exception来定义一个全新的异常
    def __init__(self,value='The proxy source is exhausted'): # 可以定制初始化方法
        super(PoolEmptyError,self).__init__()
        self.value=value

    def __str__(self): # 可以定义该方法用来定制触发异常时打印异常值的格式
        return '< %s >' %self.value


class NetworkIOError(IOError): # 也可以在特定异常的基础上扩展一个相关的异常
    pass


raise PoolEmptyError # __main__.PoolEmptyError: < The proxy source is exhausted >
raise NetworkIOError('连接被拒绝') # __main__.NetworkIOError: 连接被拒绝
自定义异常类

 

posted on 2019-12-04 22:31  rwwh  阅读(121)  评论(0)    收藏  举报

导航