首页 > 其他分享 >异常处理

异常处理

时间:2023-12-04 22:13:12浏览次数:24  
标签:处理 except try num 报错 print 异常 def

一,可避免语法异常

  • SyntaxError
    1 if x > 10  #if后面没有冒号
    2     print("x is greater than 10")
  • NameError name,变量名字取得有问题

二,难点异常

  什么时候最容易出异常当你要处理的内容不确定的时候有用户参与有外界数据接入 : 从文件中读,从网络上获取。

  多行报错;

def func1():
    name

def func2():
    func1()

def main():
    func2()

main()
#在嵌套调用的过程中,内部的代码出了问题,外部所有的调用的地方都成为报错追溯信息的一部分

  解决方案:

 

  • 从下往上找 首先找到你写的代码 出错的那一行看看能不能看出问题
    就把报错的最后一行 错误类型和详细提示贴到百度里,结合报错的那一行解决问题
  • 单分支
     1 l = ['login','register']
     2 for num,i in enumerate(l,1):
     3     print(num,i)
     4 
     5 try:
     6     num = int(input('num >>>'))
     7     print(l[num - 1])
     8 except ValueError :
     9     # 从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支
    10     print('请输入一个数字')
    11 except IndexError :
    12     # 如果找不到能处理和报错类型相同的分支,会一直往下走,最后还是没有找到就会报错
    13     print('只能输入1或2')
    单分支
  • 多分支
     1 l = ['login','register']
     2 for num,i in enumerate(l,1):
     3     print(num,i)
     4 
     5 try:
     6     num = int(input('num >>>'))
     7     print(l[num - 1])
     8 except ValueError :
     9     # 从上向下报错的代码只要找到一个和报错类型相符的分支就执行这个分支中的代码,然后直接退出分支
    10     print('请输入一个数字')
    11 except IndexError :
    12     # 如果找不到能处理和报错类型相同的分支,会一直往下走,最后还是没有找到就会报错
    13     print('只能输入1或2')
    多分支
  • 多分支合并
    1 l = ['login','register']
    2 for num,i in enumerate(l,1):
    3     print(num,i)
    4 
    5 try:
    6     num = int(input('num >>>'))
    7     print(l[num - 1])
    8 except (ValueError,IndexError) :
    9     print('您输入的内容不合法')
    多分支合并
  • 万能异常
     1 def buy():
     2     print('buy')
     3     name
     4 
     5 def back():
     6     print('back')
     7     [][1]
     8 
     9 def show():
    10     print('show')
    11     1/0
    12 
    13 def main():
    14     l = [('购物',buy),('退货',back),('查看订单',show)]
    15     while True:
    16         for num,i in enumerate(l,1):
    17             print(num,i[0])
    18         num = int(input('num >>>'))
    19         print(l[num - 1])
    20         try:
    21             func = l[num - 1][1]
    22             func()
    23         except Exception:
    24             print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
    25 
    26 main()
    万能异常
  • as语法,可以将异常打印出来
     1 def buy():
     2     print('buy')
     3     name
     4 
     5 def back():
     6     print('back')
     7     [][1]
     8 
     9 def show():
    10     print('show')
    11     1/0
    12 
    13 def main():
    14     l = [('购物',buy),('退货',back),('查看订单',show)]
    15     while True:
    16         for num,i in enumerate(l,1):
    17             print(num,i[0])
    18         num = int(input('num >>>'))
    19         print(l[num - 1])
    20         try:
    21             func = l[num - 1][1]
    22             func()
    23         except Exception as e:
    24             print(e)
    25             #print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)
    26             print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
    27 
    28 main()
    View Code
  •  多分支 + 万能异常 : 万能异常应该永远放在异常处理的最下面
     1 def buy():
     2     print('buy')
     3     name
     4 
     5 def back():
     6     print('back')
     7     [][1]
     8 
     9 def show():
    10     print('show')
    11     1/0
    12 
    13 def main():
    14     l = [('购物',buy),('退货',back),('查看订单',show)]
    15     while True:
    16         for num,i in enumerate(l,1):
    17             print(num,i[0])
    18         try:
    19             num = int(input('num >>>'))
    20             print(l[num - 1])
    21             func = l[num - 1][1]
    22             func()
    23         except (ValueError,IndexError) :
    24             print('您输入的内容不合法')
    25         except Exception as e:
    26             print(e)
    27             #print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)
    28             print('用户在选择了%s操作之后发生了不可知的异常' % l[num - 1][0])
    29 main()
    多分支+万能异常

      

     

三,其他

 

  • else分支
     1 try:
     2     print('aaa')  # 给某某某发邮件
     3     # name
     4     # [][1]
     5     # 1/0
     6 except NameError:   # 网络不稳定,邮箱地址错误
     7     print('name error')
     8 except IndexError:
     9     print('index error')
    10 except Exception as e:
    11     print('Exception')
    12 else:  # 当try中的代码不发生异常的时候 走else分支  如果发送成功了 进行一些处理
    13     print('else')
    else
  • finally分支,用来回收一些操作系统的资源 : 数据库连接 打开的文件句柄 网络连接
     1 try:
     2     print('aaa')  # 给某某某发邮件
     3     name
     4     # [][1]
     5     # 1/0
     6 except NameError:   # 网络不稳定,邮箱地址错误
     7     print('name error')
     8 except IndexError:
     9     print('index error')
    10 except Exception as e:
    11     print('Exception')
    12 else:  # 当try中的代码不发生异常的时候 走else分支  如果发送成功了 进行一些处理
    13     print('else')
    14 finally: # 无论如何都会被执行
    15     print('finally')
    16 
    17 def func():
    18     f = open('file')
    19     try:
    20         while True:
    21             for line in f:
    22                 if line.startswith('a'):
    23                     return line
    24     except:
    25         print('异常处理')
    26     finally:   # 即使return也会先执行fianlly中的代码
    27         f.close()
    28 
    29 try:
    30     f = open('www','w')
    31     f.read()
    32 finally:   # 即使遇到报错,程序结束,也会先执行finally中的代码,然后再结束程序
    33     f.close()
    34     print('文件已经关闭了')
    35 
    36 finally用来回收一些操作系统的资源 : 数据库连接 打开的文件句柄 网络连接
    finally
  • 主动抛出异常 : 是给其他开发者用的
    1 raise ValueError
    2 raise ValueError('你写的不对')
    3 django是别人写的程序 框架 --> 程序员用
    View Code
  • 断言 - 语法,与if很像。
    断言

四,总结

try常与excel、finally连用。

try ... except
try ... except ... else
try ... finally
try ... except ... finally
try ... except ... else ... finally

 

标签:处理,except,try,num,报错,print,异常,def
From: https://www.cnblogs.com/zuishaui/p/17876134.html

相关文章

  • 使用阿里云oss处理图片的格式转换
    方式一:图片上传阿里云oss之后,可以在后缀添加要求获取想要的图片,在?x-oss-process后面添加想要的参数例如,对原图example.jpg添加图片缩放resize以及质量变换quality参数后,文件URL为https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-proces......
  • Day17 异常与日志
    1.异常的概述在编程中,我们经常遇到各种不可预见的问题,例如:文件找不到、网络连接失败、数组越界等。这些问题我们通常称之为“异常”(Exception)。java把异常当作对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类。java.lang.Throwable主要分为两类错误Error......
  • 如何快速处理Git push错误的记录
    命令行如下gitreset--hardHEAD^可以本地删掉最后一个commit。gitpush--force-with-lease推送到远程删掉最后一个commitgitcherry-pickHASH最后本地恢复最后一个commit。演示操作1.准备错误的记录并进行push 可以看到push成功 2.命令行处理2.1先git......
  • 八. 异常处理和命名空间
    1.异常处理注意:以下内容在C++11中进行了优化,不再适用。在C++98中,为程序可能出现的异常提供了一套完整的机制,其基本语法如下:抛出异常:throw表达式;trycatch代码块:try{ 复合语句}catch(异常类型){复合语句}catch(异常类型){复合语句}抛出机制:当函......
  • 文字处理软件Word mac特点介绍
    MicrosoftWordmac是一款文字处理软件。它是Microsoft office 套件的一部分,已广泛用于创建、编辑和格式化文本文档。Wordmac软件特点改进的协作工具:使用MicrosoftWord2021,多个用户可以同时处理一个文档,从而更轻松地与同事或同学协作。增强的人工智能写作辅助:新版Word配备......
  • go-carbon v2.2.14 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
    carbon是一个轻量级、语义化、对开发者友好的golang时间处理库,支持链式调用。目前已被awesome-go收录,如果您觉得不错,请给个star吧github.com/golang-module/carbongitee.com/golang-module/carbon安装使用Golang版本大于等于1.16//使用github库goget-ugithu......
  • charles-造数据,接口返回值固定怎么处理
    问题现象:界面请求第三方接口时,某个字段没有返回正确或者想要修改接口返回值,那么解决的办法是打断点,每次修改接口返回值,但是这样做太麻烦了,测试100次,得改100次。         所以有个简单的办法,只需要将接口返回保存到一个文件中,每次请求都走这个文件,就解决了这个......
  • 后台处理指南
    后台处理指南 | Android开发者 | AndroidDevelopershttps://developer.android.google.cn/guide/background?hl=zh-cnProcessingdatainthebackgroundisanimportantpartofcreatinganAndroidapplicationthatisbothresponsiveforyourusersaswella......
  • 一种全新的日志异常检测评估框架:LightAD
    本文分享自华为云社区《【AIOps】一种全新的日志异常检测评估框架:LightAD,相关成果已被软工顶会ICSE2024录用》,作者:华为云PaaS服务小智。深度学习(DL)虽然在日志异常检测中得到了不少应用,但在实际轻量级运维模型选择中,必须仔细考虑异常检测方法与计算成本的关系。具体来说,尽管深......
  • 全局异常捕获
    DispatcherUnhandledException——UI线程未被处理的异常捕获从App对象中订阅DispatcherUnhandledException事件publicpartialclassApp:Application{publicApp(){//DispatcherUI线程未被处理的异常this.Disp......