异常处理
什么是异常?
程序运行时如果出现异常,整个程序就会终止掉了,对于开发者以及用户体验都是不好的。
-
语法错误
if : print(666) while 1: print(111) def func: pass
这类错误写程序是应该避免
-
逻辑错误
# num = input('>>') # int(num) dic = {'name': 'barry'} print(dic['age']
常见的错误类型
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 等等更多。。。。。。。
异常处理
在异常发生前,我们会捕获到这个异常,并且将程序引流到其他逻辑中,避免程序中断。
为什么进行异常处理
使我们的程序不中断,用户体验感更加,增强了程序的健壮性与容错性 。
异常处理的方法
-
基本语法
try: 被检测的代码块 except 异常类型: try中一旦检测到异常,就执行这个位置的逻辑
-
if else.只能处理简单的异常,简单的分流。
money = input() if money.isdecimal(): int(money) if 0<int(money)<10: 选择 else: pass else: pass
-
单分支
try: num = input('>>') int(num) dic = {'name': 'barry'} print(dic['age']) l1 = [1,2] print(l1[100]) except ValueError: print('6666') print(111)
-
多分支
try: dic = {'name': 'barry'} print(dic['age']) num = input('>>') int(num) l1 = [1,2] print(l1[100]) except ValueError: print('6666') except KeyError: pass except IndexError: print('123213') print(111)
-
万能异常-Exception.
try: l1 = [1, 2] print(l1[100]) dic = {'name': 'barry'} print(dic['age']) num = input('>>') int(num) except Exception as e: print(e)
-
多分支+万能异常
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e)
-
自定义异常
python中定义的错误类型不能满足程序中所遇到的所有的错误。
有的时候你需要自己定义一些错误类型 展示给其他人看。
class PhoneError(BaseException): def __init__(self,msg): self.msg = msg try: raise PhoneError('手机连接错误') except PhoneError as e: print(e)
-
主动抛出异常
try: raise TypeError('类型错误') except Exception as e: print(e)
-
异常处理的其他功能
try except else
如果出现异常并处理掉了,else不执行 否则就执行。
try: l1 = [1,2] l1[100] except IndexError: print('输入的有非数字元素') else: print('转账成功')
try except (else) fianlly
finally: 在异常出现程序马上终止之前,执行的操作。
try: dic = {} dic['name'] # except IndexError: # pass finally: print(666) print(111)
关闭文件句柄
try: f1 = open('test1',encoding='utf-8') f1.read() finally: f1.close()
其他强大的功能
#return 后finall可以继续执行 def func(): try: print(111) return True finally: print(222) func() #break 后finally也可以继续执行 while 1: try: print(111) print(222) break finally: print(333)
小节:如果说你就想捕获异常并处理掉,对产生的异常结果不用分流,用万能异常。你想要的通过不同的异常进行分流,多分支。
异常处理的用法
做个有理想有节操的程序员!

浙公网安备 33010602011771号