异常的处理:
>>>>>>>异常的捕获<<<<<
语法
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)