何为异常
异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常没有被应用程序处理,该异常就会被抛出,程序的执行也随着终止
异常包含三个部分:
1.traceback 异常的最终信号
2.异常的类型
3.异常的信息
错误分为两大类:
1.语法上的错误
2.逻辑上的错误
为什么要进行异常处理
避免程序因为异常而崩溃,在应用程序内处理异常,以增强程序的健壮性
如何捕获异常
已知异常类型时
x = [1,2,3,4] try: print(x[5]) except IndexError: print('超出索引长度') try: print(x[5]) except EOFError: #异常类型不匹配,仍然抛出异常 print('超出索引长度')
此外还可以通过多分支,捕获多种异常
x = [1, 2, 3, 4] try: yyy # 捕获到异常就直接执行except print(x[5]) except IndexError as e: print('超出索引长度:', e) except NameError as e: print('变量未定义:', e) # 或者合起来写 x = [1, 2, 3, 4] try: yyy # 捕获到异常就直接执行except后面的代码不会执行 print(x[5]) except (IndexError,NameError) as e: print(e)
万能异常:Exception
x = [1, 2, 3, 4] try: yyy except Exception as e: print(e)
else 及 finally
try: print('r' + 1) except Exception as e: print(e) else: print('必须放到后面,else的子代码块会在被检测的代码没有抛出异常的情况下执行') finally: print('无论被检测的代码有没有抛出异常,finally的子代码块都会执行') # 通常用于回收资源,如f.close() print('other code')
自定义异常:当python内置的异常无法满足我们的需求时,我们就可以自定义异常
class Myerror(BaseException): def __init__(self, msg): super().__init__() self.mag = msg def __str__(self): return '%s'%self.mag name=input('请输入用户名:').strip() if not name.isalnum(): raise Myerror('用户名只能包含数字和字母') print('合法!')