1 什么是异常
异常是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行,一般情况下,在Python无法正常处理程序时就会发生异常。
Python脚本发生异常时,我们需要捕获并处理异常,否则程序会终止执行。
Python中重要的内建异常类型:
- Exception:常规错误的基类
- AttributeError:对象没有这个属性
- IOError:输入/输出操作失败
- IndexError:序列中没有此索引
- KeyError:映射中没有这个键
- NameError:未声明/初始化对象(没有属性)
- SyntaxError:Python语法错误
- SystemError:一般解释器系统错误
- ValueError:串入无效的参数
2 捕获单个异常
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加try来捕获异常,捕获异常最简单的语法格式:
try: <语句1># 尝试执行的代码except <异常类型1>: <语句2># 如果在try部分引发了异常
比如:
def exp_exception(x, y): try: a = x/y print("a = ", a) return a except Exception: print("程序出现异常,异常信息:被除数为0!")print(exp_exception(6, 0))
3 捕捉多个异常
捕获异常最简单的语法格式:
try: <语句1># 尝试执行的代码except <异常类型1>: <语句2># 如果在try部分引发了异常except <异常类型2>: <语句3># 如果在try部分引发了异常
比如:
def mult_exception(): try: # 提示用户输入一个整数 num = int(input("请输入一个整数:")) result = 8/num print(result) except ZeroDivisionError: print("除0错误!") except ValueError: print("请输入正确的整数!")mult_exception()
4 块捕捉多个异常
指一个try对应一个except子句,同时捕捉一个以上的异常 except
(
异常类型1
,
异常类型2,……
)
。比如:
def model_exception(): try: b = name a = x/y except(ZeroDivisionError, NameError, TypeError): print("z这个异常是ZeroDivisionError / NameError / TypeError")model_exception(2, 0)
5 异常捕获的完整语法
在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
try: 1>except 1>: 2>except 2,异常类型 3>except Exception as result: print(“未知错误:%s” % result)# 打印错误信息else: 4>finally: 5>
6 抛出异常
在开发中,除了代码执行出错,Python解释器会抛出异常之外,还可以根据应用程序特有的业务需求主动抛出异常。
一个普通的异常:raise NameError
一个带有错误提示的异常:raise NameError(
“
这是一个NameError异常
”
)
7 捕捉对象
在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应。如果希望在except子句中访问异常对象本身,也就是看到一个异常对象真正的异常信息,可以使用as别名的形式,我们称为捕捉对象。
try: 1>except 1>: 2>except 2,异常类型 3>except Exception as result: print(“未知错误:%s” % result)
当Python抛出异常时,最后一行错误信息的第一个单词就是错误类型。
def mult_exception(): try: # 提示用户输入一个整数 num = int(input("请输入一个整数:")) result = 8/num print(result) except ValueError: print("请输入正确的整数!") except Exception as result: print("未知错误:%s!" % result)mult_exception()
运行结果如下: