python异常处理机制

异常的处理:

 

>>>>>>>异常的捕获<<<<<

 

语法

 

Try:

  尝试执行代码

 

  可能出现异常的代码

 

Except:

 

  出现错误的处理

 

  如果try部分出现了异常,expcept部分一定会执行

 

  Except()部分主要用来捕获异常,并处理异常

 

一次捕获多个异常的语法:

 

Try:

 

  可能出现异常的代码

 

Except(异常的类型1,异常的类型2,异常的类型3):

 

  捕获任意类型异常  格式:except Exception:

 

  获取异常的错误信息,给异常类型起别名

 

 Except 异常类型名  as 别名

 

  (别名中记录异常的信息)

try:
    lt = [10,20]
    print(lt[5])

except NameError as  ret:
    print("已经捕获到变量未定义异常了,对异常进行处理,ret:",ret)
except ValueError as exp:
    print("已经捕获到值错误异常,对异常进行处理,exp:",exp)
except Exception as exp:
    print("捕获到任意类型异常了,对异常进行处理---exp:",exp)
print("程序结束了")

 

访问异常信息:

 

Args:该属性返回异常的错误编号和描述字符串

 

Errno:该属性返回异常的错误编号

 

Strerror:该属性返回异常的描述字符串

 

With_traceback():通过该方法可处理异常的传播轨迹信息

 

 

def foo():
    try:
        fis = open("a.txt");
    except Exception  as e:
        print(e.args )
        print(e.errno)
        print(e.strerror)
foo()

 

使用raise引发异常:

要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称。关键字raise是用来抛出异常的,一旦抛出异常后,后续的代码将无法运行。

raise 语句的基本语法格式为

raise [exceptionName [(reason)]]

其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。

raise 语句有如下三种常用的用法:

1,raise:单独一个raise,该语句引发当前上下文中捕获的异常(比如在except块中),或默认引发RuntimeError异常。

try:
    a = input("输入一个数:")
    if(not a.isdigit()):
        raise
except RuntimeError as e:
    print("引发异常:",repr(e))

2.raise异常类:raise后带一个异常类。该语句引发指定异常类的默认实例。

try:
    a = input("输入一个数:")
    #判断用户输入的是否为数字
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
except ValueError as e:
    print("引发异常:",repr(e))

3.Raise异常对象:引发指定的异常对象。

try:
    a = input("输入一个数:")
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
except ValueError as e:
    print("引发异常:",repr(e))
    raise

Python 的异常传播轨迹:

Traceback模块:

Traceback.print_exc():将异常传播轨迹信息输出到控制台或指定文件中

Format_exc():将异常传播轨迹信息转换成字符串

Print­_exception(etype,value,tb[,limit[,file]])

Etype:指定异常类型

Value:指定异常值

Tb:指定异常的traceback信息。

 

实现异常的完整语法:

 

# 实现异常的完整语法
try:
#     可能会出现异常的代码
except 异常类型1:
#     针对该异常类型的处理代码
except 异常类型2:
#     针对该异常类型的处理代码
except 异常类型3:
#     针对该异常类型的处理代码
except Exception as exp:
#     exp中获取异常的错误信息
#     except部分只有在发生异常时才会执行
else:
#     else部分在没有发生异常时才会执行
finally:
#     finally部分无论有没有异常都会执行

 

自定义抛出异常:

 

# 定义  input——password 函数  提示用户输入密码

def input_password():
    pwd = input("请输入密码:")
    # 如果用户输入长度<8,抛出异常
    if len(pwd)<8:
        print("抛出异常")
        # 使用exception类创建对象
        ex = Exception("错误:密码长度小于8位")
        # 使用raise 跑出异常对象
        raise  ex
    # 如果用户输入长度 >=8  返回输入密码
    else:
        return  pwd

try:
    ret =input_password()
    print(ret)
except Exception as exp:
    print("捕获任意类型异常,exp:",exp)

 

上一篇:python面向对象及相关


下一篇:【龙珠-Python训练营】Python学习-条件语句、异常处理