异常捕获

目录
  • 异常捕获
    • 一、关于异常捕获的基本知识
      • 1.异常定义
      • 2.异常分类
      • 3.异常结构
      • 4.异常类型
      • 5.断言与主动抛异常
    • 二、异常捕获语法结构
      • 1.基本语法结构
      • 2.查看错误的信息
      • 3.针对不同的错误类型制定不同的解决方案
      • 4.万能异常 Exception/BaseException
      • 5.结合else使用
      • 6.结合finally使用
      • 7.异常捕获应用场景

异常捕获

一、关于异常捕获的基本知识

1.异常定义

异常就是代码运行报错 行业俗语叫bug
代码运行中一旦遇到异常会直接结束整个程序的运行 我们在编写代码的过程中药尽可能避免

2.异常分类

语法错误 不允许出现 一旦出现立刻改正 否则提桶跑路
逻辑错误 允许出现的 因为它一眼发现不了 代码运行之后才可能会出现

3.异常结构

错误位置
错误类型
错误详情

4.异常类型

SyntaxError  
NameError
IndexError
KeyError
IndentationError
Exception/BaseException
......

5.断言与主动抛异常

'断言' assert

name = 'almira'
assert isinstance(name, str)
print('哈哈哈 我就说吧 肯定是字符串')
name.strip()
'主动报异常'	raise

name = 'almira'
if name == 'almira':
    raise Exception('老子不干了')
else:
     print('正常走')

二、异常捕获语法结构

1.基本语法结构

try:
    待监测的代码(可能会出错的代码)
except 错误类型:
    针对上述错误类型制定的方案   

2.查看错误的信息

try:
    待监测的代码(可能会出错的代码)       
except 错误类型 as e:  # e就是系统提示的错误信息
    针对上述错误类型制定的方案

3.针对不同的错误类型制定不同的解决方案

try:
    待监测的代码(可能会出错的代码)
except 错误类型1 as e:  # e就是系统提示的错误信息
    针对上述错误类型1制定的方案
except 错误类型2 as e:  # e就是系统提示的错误信息
    针对上述错误类型2制定的方案
except 错误类型3 as e:  # e就是系统提示的错误信息
    针对上述错误类型3制定的方案
 	...

4.万能异常 Exception/BaseException

try:
    待监测的代码(可能会出错的代码)
except Exception as e:  # e就是系统提示的错误信息
     针对各种常见的错误类型全部统一处理

5.结合else使用

try:
    待监测的代码(可能会出错的代码)
except Exception as e:  # e就是系统提示的错误信息
    针对各种常见的错误类型全部统一处理
else:
    try的子代码正常运行结束没有任何的报错后 再执行else子代码

6.结合finally使用

try:
    待监测的代码(可能会出错的代码)
except Exception as e:  # e就是系统提示的错误信息
    针对各种常见的错误类型全部统一处理
else:
    try的子代码正常运行结束没有任何的报错后 再执行else子代码
finally:
    无论try的子代码是否报错 最后都要执行finally子代码

7.异常捕获应用场景

·异常处理能尽量少用就少用
·被try监测的代码能尽量少就尽量少
·当代码中可能会出现一些无法控制的情况报错才应该考虑使用 如断网断电
本文转载于网络 如有侵权请联系删除

相关文章

  • JVM-深入学习字符串常量池

    JVM-深入学习字符串常量池第一二张图应该画错了,元空间的时候,字符串常量池已经移入堆内首先声明,在JDK1.7的时候,字符串常量池已经从方法区迁移到了堆内存,JDK1.8的时候方法区改朝换代为元空间,同时也不在占用JVM内存,而是使用本地内存为什么多设计一个常量池,不能像其它对象一样乖乖待在堆中吗?鄙人大胆猜测:对象的分配需要时间和空间的开销,一般在程序中。字符串使用的频段还是很高的,另一方面,常用的数据库密码、用户名啥的都是使用字符串保存的,如果不将其放入字符串常量池的话,使其频繁创建销毁的话,性能和安全性都是划不来的,所以这就是为什么会有字符串常量池和String为什么是final修饰的原因。上代码,下面这种字面量声明的方式是我们最常用的方式。这样声明会直接将字符串”晓果冻“放入字符串常量池 再声明一个对象s2,因为“晓果冻”已经在字符串常量池中存在了,所以s2直接指向字符串常量池中的地址Strings2="晓果冻";复制那newString("")呢,分2种情况被new的字符串已经在常量池存在,那么堆就会指向字符串常量池中的地址 ​ 为

  • 部署SonarQube代码检测服务以及jenkins实现代码自动测试、自动部署

    1.SonarQube部署前的内核参数等配置以及Java环境配置1)修改内核参数配置,使满足环境要求[root@sonarqube~]#vim/etc/sysctl.conf vm.max_map_count=262144 fs.file-max=65536 [root@sonarqube~]#sysctl-p#生效修改的内核参数 …… vm.max_map_count=262144 fs.file-max=65536复制2)修改本机安全策略参数限制[root@sonarqube~]#vim/etc/security/limits.conf …… sonarqube-nofile65536 sonarqube-nproc2048复制3)配置java环境(至少jdk-8或openjdk-8版本)[root@sonarqube~]#ls/usr/local/src/ jdk-8u211-linux-x64.tar.gz [root@sonarqubesrc]#tarxvfjdk-8u211-linux-x64.tar.gz [root@sonarqubesrc]#ln-svjdk1.8.0

  • GO Excel 转 JSON (完整代码)

    packagemain import( "fmt" "github.com/xuri/excelize/v2" "io/ioutil" "os" "path/filepath" ) funcinit(){ } //配置文件目录 varconfigPathstring="../../Configs" varoutjsonPathstring="./json/" funcgetFileList(pathstring)[]string{ varall_file[]string finfo,_:=ioutil.ReadDir(path) for_,info:=rangefinfo{ iffilepath.Ext(info.Name())==".xlsx"{ real_path:=path+"/"+info.Name() ifinfo.IsDir(){ //all_fi

  • Intellij IDEA Maven dependency自动补全和Maven Artifact Search为空问题

    IDEA使用Maven开发过程中遇到两种问题:1、IDEA上使用maven插件,在pom.xml编写项目依赖的jar包时,已经下载到本地的jar,无法自动补全,需要手动书写。2、代码编写过程中,写新的类但是没有在pom.xml中添加依赖,可以ALT+Enter组合件选择AddMavenDependency(添加maven依赖)发现搜索的结果总是为空(Noresults)有两种方案:一种是曲线救国直接从中央库搜索复制对应配置;还有一种方式是通过更新中央库索引。第一种方案:这也有一个曲线救国的方案,直接在 maven仓库中搜索:https://mvnrepository.com 并复制对应的依赖配置。直接复制就可以在pom.xml里面粘贴第二种方案: 在settings->Build->BuildTools-->Maven-->Repositories 没有更新过的Updated对应的值为Never点击右侧的Update按钮 等待更新完成(时间较长,需要耐心等待,也可以使用代理),完成后会Processingindices(处理索引)然后更新本地仓库等更新以后,核对

  • IIS出现异常的解决方法_C# 网站部署

    使用C#MVC模式开发网站,工作中遇到的部署问题总结如下:  一、 1、程序成功部署,但有可能出现上图异常,解决办法如下:(确认程序已经安装。路径如下:控制面板\程序\程序和功能打开或关闭Windows功能) 2、IIS如下图设置,也需要设置成.NETFramworkv4.0.30319  3、如果还是有异常,执行如下命令:  二、 1、上述异常解决,但仍有可能出现以下异常: 2、解决方法: 在网站程序的web.config文件修改如下,加上红色区域代码(非常关键)。  <system.webServer>  <modulesrunAllManagedModulesForAllRequests="true">  <addname="ErrorLog"type="Elmah.ErrorLogModule,Elmah"preCondition="managedHandler"/>  <addname="ErrorMail"type="Elm

  • 【iOS开发】canOpenURL: failed for URL

    控制台输出如图是在我启动一个Xcode7+iOS9的App之后,控制台的输出。这在Xcode6.4+iOS8时,是不会有的情况,原因是【为了强制增强数据访问安全,iOS9默认会把所有从NSURLConnection、CFURL、NSURLSession发出的HTTP请求,都改为HTTPS请求:iOS9.x-SDK编译时,默认会让所有从NSURLConnection、CFURL、NSURLSession发出的HTTP请求统一采用TLS1.2(SSL3.1)协议。】下面说解决方案:①如果你的输出信息是-canOpenURL:failedforURL:"kindle://home"-error:"Thisappisnotallowedtoqueryforschemekindle" setBitcodetoNO 去你的target里面的BuildSettings下的EnableBitcode,把它设置成NO,这不一定会阻挡你的控制台继续输出这条信息,但是可以保证你的App正常运行。②如果你的输出信息是xxxx-error:"Thisappis

  • 图的遍历

    这篇文章中总结一下关于图的遍历算法,在此之前,我们来看一下什么是图:首先,图可以分为有向图和无向图(这里只讨论无权图),像下面这个图就是无向图,V1~V5是图的顶点,而连接图的两个顶点的线就叫边或者专业一点的说法叫做:“度”,在无向图中,两个顶点之间的连线的方向可以是互换的,比如说,V1顶点和V2顶点之间的边我们可以看做是以V1为起点,V2为终点的一条边,也可以看做是以V2位起点,V1位终点的一条边。由此,一个无向图的度的总数等于这个图中的边的总数的两倍,下面的那个图中一共有7条边,因为它是无向图,那么它的度的总数就是14。下面来看一下有向图:有向图和无向图不同,图中的每一条边都是有方向的而且是唯一的,像下面的图中,V1到V2中就只有一条边,方向是从V1到V2,V2到V3也只有一条边,方向是从V2到V3。V1和V3之间有两条边,分别是从V1到V3和V3到V1,在这个有向图中度的总数为4。接下来来看一下图的储存方式,我们用什么来储存一个图信息呢?最常用的方法就是通过图的邻接矩阵和邻接表来实现,邻接矩阵顾名思义就是用一个二维数组来储存图的信息,图的顶点数目为二维数组的下标最大值,如果两个顶

  • 学界 | DeepMind提出关系RNN:记忆模块RMC解决关系推理难题

    选自arXiv机器之心编译参与:路、思源不久之前,DeepMind和伦敦大学学院CoMPLEX的研究者提出一种关系循环神经网络,该网络利用一种新型记忆模块RMC解决标准记忆架构难以执行关系推理任务的问题。该方法在强化学习领域(如MiniPacMan)、程序评估和语言建模上获得了很大进步,在WikiText-103、ProjectGutenberg和GigaWord数据集上获得了当前最优的结果。论文:Relationalrecurrentneuralnetworks论文链接:https://arxiv.org/abs/1806.01822摘要:基于记忆的神经网络通过长期记忆信息来建模时序数据。但是,目前尚不清楚它们是否具备对记忆信息执行复杂关系推理的能力。在本论文中,我们首先确认了标准记忆架构在执行需要深入理解实体连接方式的任务(即涉及关系推理的任务)时可能会比较困难。然后我们利用新的记忆模块RelationalMemoryCore(RMC)改进这些缺陷,RMC使用Multi-head点积注意力令记忆相互影响。最后,我们在一系列任务上对RMC进行测试,这些任务可从跨序列信息的更强大关系推

  • 专访Ian Goodfellow:欲在谷歌打造GAN团队,用假数据训练真模型

    【新智元导读】近日,从OpenAI重回谷歌大脑的IanGoodfellow接受Wired专访,这篇文章被Google+推荐为关于对抗生成网络历史和未来的绝佳文章。专访中,作者透露,作为2017年最火的一项深度学习技术,GAN竟来自Goodfellow在一次酒后与同行的争论。此外,回到谷歌以后,Goodfellow将打造一个专门研究GAN的团队。理查德·费曼去世后,他教室的黑板上留下这样一句话:“我不能创造的东西,我就不理解。”(WhatIcannotcreate,Idonotunderstand.)IanGoodfellow在解释他在GoogleBrain所做的研究时,引用了这位伟大的物理学家的这句名言,费曼是加州理工学院教授,同时也是畅销书作者。但Goodfellow指的不是自己,也不是Google内部的其他任何人。他指的是机器:“AI不能创造的东西,它就不理解。”Goodfellow是世界上最重要的AI研究者之一,他在OpenAI(谷歌大脑的竞争对手,由ElonMust和SamAltman创立)工作过不长的一段时间,今年3月重返GoogleBrain,建立了一个探索“生成模型”(g

  • 牛津大学教授:AlphaGo Zero的自学能力“可能会出现自发性”

    【新智元导读】根据新智元此前报道,新一代AlphaGoZero以100:0打败了AlphaGo。AlphaGoZero能获得如此战绩,完全通过自学,无需任何人类知识的输入。这是机器崛起,迈向超人类能力的重要一步。那台曾经打败人类顶尖棋手、扬名天下的AlphaGo变得更聪明了。根据新智元此前报道,新一代AlphaGoZero以100:0打败了AlphaGo。AlphaGoZero能获得如此战绩,完全通过自学,无需任何人类知识的输入。这是机器崛起,迈向超人类能力的重要一步。AlphaGoZero在三天内就掌握了几千年来的围棋知识。而围棋,被认为是世界上最复杂的二人对弈。DeepMind首席研究员、AlphaGo研究负责人DavidSilver表示,“AlphaGoZero不仅发现了人类玩家通常使用的模式和开局方法,它更是抛弃了这些(传统打法),采取了人类完全不了解的新玩法。”不受人类知识限制据DeepMind研究人员称,和AlphaGo通过学习人类棋局不同,AlphaGoZero并未看过任何棋谱,也没有和人类对弈过。Silver此前在一个视频中介绍到,“之前所有版本的AlphaGo都被告知

  • 游戏渣优化都赖它?从“吃鸡”和虚幻4谈谈游戏引擎

    最近,外号“吃鸡”的《绝地求生》这款游戏,红遍了国内外。大家一边享受大逃杀乐趣的同时,一边对其渣优化进行了狂轰滥炸式的吐槽——这游戏画质的确不错,但硬件需求实在是太触目惊心了。官方最低配置写着的GTX660简直就是一个欺诈,就算开最低特效,实战中GTX660仍不够看,1080p下跑不到60帧,更何况最低画质设置下的纹理已经模糊得一塌糊涂。如果要享受到养眼的画质,真正需要的是GTX1060。对于一款网战游戏,这硬件胃口也未免太大了些。吃鸡是什么游戏?就是《绝地求生》,游戏胜利后会显示“大吉大利晚上吃鸡”的句子如果和同期的网战游戏如H1Z1相比,“吃鸡”的画质的确很好。但是,它的画质仍然比不过同期的单机游戏,而且硬件需求更有甚之,这也是为何玩家们认为《绝地求生》属于渣优化的一大理由。为什么《绝地求生》的优化做得如此差?不少人把矛头指向了它所使用的“虚幻4”游戏引擎,认为这引擎是游戏渣优化的主要原因。真的是这样吗?今天就一起来谈谈相关的话题吧。虚幻4引擎:配置要求真的高?“虚幻”引擎可谓是大名鼎鼎了,如果你玩的游戏比较多,一定会发现不少游戏的开场画面都会出现“UnrealEngine”的Lo

  • 桥接模式

    一、概述1、桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。2、在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,桥接模式把这种多维度分离出来,让他们独立变化,减少之间的耦合。感觉桥接模式的结构有点像抽象工厂模式,但桥接模式属于结构型模式,而抽象工厂模式属于创建型模式。3、UML4、所属类别:结构型二、C++程序和抽象工厂中的例子保持一致,这里还以linux、windows系统、手机、电脑为例1//桥接模式.cpp:定义控制台应用程序的入口点。 2// 3 4#include"stdafx.h" 5#include<iostream> 6usingnamespacestd; 7classRuanjian 8{ 9public: 10Ruanjian(){} 11~Ruanjian(){} 12virtualvoidOS()=0; 13}; 14classLinux:publicRuanjian 15{ 16public: 17Linux(){} 18virtual~Linux(){} 19virtualvoidOS() 20

  • 小白学习C语言 第2 天

    1.给定两个整型变量的值,将两个值的内容进行交换。#define_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> intmain() { inta,b,t; printf("请输入您所交换的内容:"); scanf("%d%d",&a,&b); t=a; a=b; b=t; printf("%d%d\n",a,b); system("pause"); return0; }复制2.不创建临时变量,交换两个数的内容#define_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> intmain() { inta,b; printf("请输入您所交换的内容:"); scanf("%d%d",&a,&b); a=a+b; b=a-b; a=a-b; prin

  • win8最流畅的设置方法_Windows 12

    indowsXP终极优化设置(精心整理篇) ◆一、系统优化设置◆1、系统常规优化1)关闭系统属性中的特效,这可是简单有效的提速良方。点击开始→控制面板→系统→高级→性能→设置→在视觉效果中,设置为调整为最佳性能→确定即可。2)“我的 电脑”-“属性”-“高级”-“错误报告”-选择“禁用错误汇报”。 3)再点“启动和故障 恢复”-“设置”,将“将事件写入系统日志”、“发送管理警报”、“自动重新启动”这三项的勾去掉。再将下面的“写入调试信息”设置为“无”。4)“我的电脑”-“属性”-“高级”-“性能”-“设置”-“高级”,将虚拟内存值设为物理内存的2.5倍,将初始大小和最大值值设为一样(比如你的内存是256M,你可以设置为640M),并将虚拟内存设置在系统盘外(注意:当移动好后要将原来的文件删除)。5)将“我的文档”文件夹转到其他分区:右击“我的文档”-“属性“-“移动”,设置到系统盘以外的分区即可。6)将IE临时文件夹转到其他分区:打开IE浏览器,选择“工具“-“internet选项”-“常规”-“设置”-“移动文件夹”,设置设置到系统盘以外的分区即可。◆2、加速XP的开、关机1

  • 批量绘制玻璃异形的巧妙办法(1分钟绘制几十个任意四边形或别的异形)

       原文来自:http://oaim.cn/E7NrAb       建筑玻璃经常遇到任意四边形,梯形和平行四边形等,客户往往给定一个示意图和一个对应参数的表格。         为了加工出来,有2个办法,一个是购买派尔的异形玻璃优化软件,需要花钱;为了省钱,我们需要在AutoCAD上一个个绘制出来。           收费的东西我们就不讲了,我们要讲就讲免费的方式。           下面几十个任意四边形,学会了本文技巧,只需要1分钟就搞定!          绘制这些图形,需要一些技巧,而且很费精力和时间,其实我们可以通过

  • raft 论文

    raft论文,摘自  http://www.infoq.com/cn/articles/raft-paper raft动画:https://raft.github.io/ raft说明动画:

  • 【多活经验】

    参考:https://zhuanlan.zhihu.com/p/32009822  饿了么异地多活技术实现 1、异地多活的架构原则: 业务内聚:单个订单的旅单过程,要在一个机房中完成,不允许跨机房调用。这个原则是为了保证实时性,旅单过程中不依赖另外一个机房的服务,才能保证没有延迟。我们称每个机房为一个ezone,一个ezone包含了饿了么需要的各种服务。一笔业务能够内聚在一个ezone中,那么一个定单涉及的用户,商家,骑手,都会在相同的机房,这样订单在各个角色之间流转速度最快,不会因为各种异常情况导致延时。恰好我们的业务是地域化的,通过合理的地域划分,也能够实现业务内聚。 可用性优先:当发生故障切换机房时,优先保证系统可用,首先让用户可以下单吃饭,容忍有限时间段内的数据不一致,在事后修复。每个ezone都会有全量的业务数据,当一个ezone失效后,其他的ezone可以接管用户。用户在一个ezone的下单数据,会实时的复制到其他ezone。 保证数据正确:在确保可用的情况下,需要对数据做保护以避免错误,在切换和故障时,如果发现某些订单的状态在两个机房不一致,会锁定该

  • tomcat结合nginx使用小结

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢?可能很多人未必了解。 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了。摘一段百度百科上的描述: 反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。复制 这里讲得很直白。反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。 说到上面的方式,也许

  • 价值

    如何让自己努力变得更有价值 https://jingyan.baidu.com/article/95c9d20d744ce8ec4e756126.html 怎样让人生的努力变得有价值 https://zhidao.baidu.com/question/1371083967915940379.html 如何让自己变得有价值 https://zhidao.baidu.com/question/1610728833914319387.html 怎样让自己在工作中变得有价值 https://zhidao.baidu.com/question/2056578616356773907.html

  • Input输入框输入银行卡号自动空格

    input输入框是表格中用都最多的,像输入手机,密码,银行卡号的,很多对于输入银行卡号是没有处理的,比如这样~~ 看起来是不是一团乱麻,,眼睛瞬间一片漆黑~ 如果是这样,会不会好很多呢~~ 其实逻辑非常的简单,就是利用我们输入数字时候的键盘key来控制~ 毕竟银行卡号肯定是只有数字的吧~~键盘上可以输入数字的,除了小键盘数字键,就是键盘上方的数字键了,~把这些都找出来判断一下,就可以了~~~   先科普一下我们电脑上的对应KEY值   自动4个数值空格的方法~~ !function(){ $('#input').on('keyupmouseoutinput',function(e){//当前输入框 if((e.which>=48&&e.which<=57)||(e.which>=96&&e.which<=105)){//判断输入KEY范围 var$this=$(this), v=$this.val(); /\S{5}/.test(v)&&$this.val(v.rep

  • 004-linux常用命令-网络命令

    网络命令:write 指令名称:write 指令所在路径:/usr/bin/write 执行权限:所有用户 语法:write<用户名> 功能描述:给用户发信息,以Ctrl+D保存结束 范例:#writelinzhiling 网络命令:wall 指令名称:wall 命令英文原意:writeall 指令所在路径:/usr/bin/wall 执行权限:所有用户 语法:wall[message] 功能描述:发广播信息 范例:#wallShenChaoisahonestman! 网络命令:ping 命令名称:ping 命令所在路径:/bin/ping 执行权限:所有用户 语法:ping选项IP地址 -c指定发送次数 功能描述:测试网络连通性 范例:#ping192.168.1.156 网络命令:ifconfig 命令名称:ifconfig 命令英文原意:interfaceconfigure 命令所在路径:/sbin/ifconfig 执行权限:root 语法:ifconfig网卡名称IP地址 功能描述:查看和设置网卡信息 范例:#ifconfigeth0192.1

相关推荐

推荐阅读