异常
Python遇到错误后,会引发异常;如果异常对象并未被处理或捕捉,则程序就会用所谓的回溯(Traceback,一种错误信息)来终止执行
异常的处理
1、异常是指在程序执行过程中发生的一个事件,会影响程序的正常运行,所以一般需要进行捕获异常并处理
2、异常的捕获使用try/except/else/finally语句进行捕获操作,并告诉python发生异常时怎么办
3、将导致错误的代码行放在了一个try代码块中,如果try代码块中的代码运行起来没有问题,python将跳过except代码块;如果try代码块中的代码导致了错误,python将查找这样的except代码块,并运行其中的代码,要求except中指定的错误与引发的错误相同,否则继续报错
try: print(a) #如果这句话有错,就会捕获到异常 except ValueError: #NameError 异常,不匹配所以不执行 print('变量未定义') except NameError: #对NameError异常的处理 print('变量未定义') #输出为 变量未定义 #捕获异常的具体信息 try: print(b) #如果这句话有错,就会捕获到异常 except NameError as error: print(error) #打印具体的异常信息 输出为 name 'b' is not defined #包含多个异常,只要检测到一个错误,异常检测就不再运行 try: #print(c) files = open('异常实验1.txt','r',encoding= 'utf-8') #如果这句话有错,就会捕获到异常 except (NameError,FileNotFoundError) as error: #通过元组放入多个异常类型 print(error) #输出为 [Errno 2] No such file or directory: '异常实验1.txt' #所有异常 try: print(d) files = open('异常实验.txt','r',encoding= 'utf-8') #如果这句话有错,就会捕获到异常 except Exception as error: print(error) #输出为 name 'd' is not defined ''' esle:没有异常时要执行的语句 ''' try: files = open('异常实验.txt','r',encoding= 'utf-8') #如果这句话有错,就会捕获到异常 except Exception as error: #有异常时执行 print(error) else: #没有异常时执行 print('没什么问题') #输出为 没什么问题 ''' finally:不管有没有异常都会执行的代码块 ''' try: print('打开文件!') #输出为 打开文件! files = open('异常实验.txt','w',encoding='utf-8') try: files.write('测试一下行不行') except: print('写入失败') #没有执行,代表写入成功 else: print('写入成功') #输出为 写入成功 finally: #不管有没有异常都要执行的代码块 print('关闭文件') #输出为 关闭文件 files.close() except Exception as error: print(error) #没有执行,第一个try里的代码正确
小练习
加法运算:提示用户提供数值输入时,用户提供的是文本而不是数字,在这种情况下,当你尝试将输入转换为整数时,如果用户的输入不是数字而是字母,将引发ValueError异常;编写一个程序,提示用户输入两个数字,将它们相加并打印结果;在用户输入的任何一个值不是数字而是字母时都捕获ValueError异常,并打印一条友好的错误消息
try: num1 = int(input('请输入第一个数字:')) num2 = int(input('请输入第二个数字:')) except ValueError: print('输入类型有误,请输入数字') else: print(num1+num2)
常见异常
总结
try语句按照如下方式工作:
1、首先,执行try子句(在关键字try和关键字except之间的语句)
2、如果没有异常发生,忽略except子句,try子句执行后结束
3、如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略,如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行,最后执行 try 语句之后的代码。
4、如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中(嵌套)
5、一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常
6、至多只有一个分支会被执行,处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常
7、一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组