python判断正确错误_Python错误和异常-程序员宅基地

技术标签: python判断正确错误  

目录

1 错误和异常

1.1 错误

python 中的错误有两种,语法错误和逻辑错误

这种错误是我们应该避免的

1.2 异常

python中的异常是程序运行过程中产生的,有异常不一定要把程序停止,只要把异常抛出,然后查看异常产生的原因即可。

1.2.1 python中的异常种类

AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError使用一个还未被赋予对象的变量

TypeError 传入对象类型与要求的不符合

UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,

导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

## 2 异常处理

>

Python解释器检测到错误,触发异常,程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

### 2.1 python 的异常处理机制

```python

try:

被检测的代码块

except 异常类型:

try中一旦检测到异常,就执行这个位置的逻辑

下面的except就是相当于if,但是不能把所有的的错误用except,于是就有了Exception

try:

print("====")

print(x)

except KeyError as x: # 命名错误

print(x) # 把错误的内容传递给x

except NameError as y:

print(y)

Exception 万能异常

x = 1

try:

print(x)

except Exception as e: # 都能处理异常

print(e)

else:

# pass

print("hello") # try内代码块没有异常则执行我

finally:

# pass

print("都会执行") # 通常用于清理工作,比如关闭数据连接

主动抛出异常

try:

raise TypeError('类型错误')

except Exception as e:

print(e)

自定义异常

class abcException(BaseException): # 这里是继承BaseException

def __init__(self,msg):

self.msg=msg

def __str__(self):

return self.msg

try:

raise abcException('类型错误')

except abcException as e:

print(e)

断言

assert 1 == 1

assert 1 == 2

try..except的方式比较if的方式的好处

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性

使用try..except的方式

把错误处理和真正的工作分开来

代码更易组织,更清晰,复杂的工作任务更容易实现;

毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

什么时候用异常处理

try…except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的

这种东西加的多了,会导致你的代码可读性变差

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39846364/article/details/110126296

智能推荐

Three.js杂记(十二)—— VR全景效果制作·中_js vr全景看车-程序员宅基地

文章浏览阅读834次。文章目录序正文开始引入threeJs材料收集实现原理实现步骤基础的全景完成完整Vue代码总结序在web的前端发展过程中,对于视觉化的要求已经越来越高有关于VR全景的效果也同样可以在网页中实现了,不用戴上VR设备,你也可以在网页上体会一把“身临其境”的感觉全景视觉之前的我ThreeJS系列博客中也曾经写过一篇关于如何制作全景效果的文章,不过只有上半部分的素材采集**(虽然这很重要)**这是我ThreeJs系列地址,如果对页面3D感兴趣的同学可以过去学习:https:_js vr全景看车

折腾Redis之字符串_redisson list中取出的对象是字符串-程序员宅基地

文章浏览阅读3.8k次,点赞19次,收藏5次。 字符串是Redis五种基本数据类型中的基础。同时也是我们在学习编程中接触最多的一种数据类型。本文将从使用、源码、编码三个部分讲解此数据类型在Redis中的使用。字符串 string是Redis中最简单的数据结构。Redis中所有的数据结构都是以唯一的key字符串作为名称,根据此key获取value,差异仅在于value的数据结构不同。string使用非常广泛,最常_redisson list中取出的对象是字符串

vscode c/c++ global插件实现代码跳转_c++ gnu global-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏19次。在vscode阅读编写c/c++代码时,体验不是很好,有时候会无法跳转。这里通过GNU Global工具解决这个问题。_c++ gnu global

How to solve “Dynamic Web Module 3.1 requires Java 1.7 or newer” in Eclipse_dynamic web module 3.1 requires java 1.7 or newer -程序员宅基地

文章浏览阅读2.2k次。Have you noticed above type of error in yourEclipse? When you’re creating a project with Dynamic Web Module 3.1 support, you should be using Java 1.7 or newer. Please follow below steps to_dynamic web module 3.1 requires java 1.7 or newer in eclipse. how to solve i

Tomcat介绍-程序员宅基地

文章浏览阅读6.6w次,点赞43次,收藏427次。文章目录Tomcat介绍Container 结构分析Tomcat请求过程安装Tomcat优化tomcat启动速度Tomcat主要目录说明Tomcat 虚拟主机配置HTTP 请求过程Tomcat优化Tomcat介绍tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。Tomcat由一系列的组件构成,其中核心的组件有三个:(1) we_tomcat

内核函数前面单下划线和双下划线_linux内核函数 前置下划线-程序员宅基地

文章浏览阅读2.4k次。在我们阅读内核代码时,经常会看到有的函数名称前面会带有“_ _”的双下划线,而有些又没有,这个有什么用呢?原来内核API函数具有这种名称的,通常都是一些接口的底层函数,应该谨慎使用。实质上,这里的双下划线就是要告诉程序员:谨慎调用,后则后果自负。举个例子,在内核模块的初始函数时,实际的定义如下: static int _ _init initializition_funct_linux内核函数 前置下划线

随便推点

python 使用API并将获取到的数据可视化的基本方法(详细)_根据api展示数据-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏20次。我们将编写一个程序,它将会自动下载GitHub网站上星星最多的python项目的信息,并对这些信息简单可视化。_根据api展示数据

(转)em重建全过程-程序员宅基地

文章浏览阅读92次。该问题遇到N次,被郁闷N次,特此记录以备不时之需由于n久不用em,而本机在公司使用dhcp自动获取ip,导致ip变化,而使em启动报出ora-12514 DBD ERROR: OCIServerAttach的错误不得不禁用dhcp,分配固定ip并重建em,过程如下:1.删除EMC:\Documents and Settings\User>emca -deconfig dbco..._重建em

SVN-git-github-版本控制服务器-程序员宅基地

文章浏览阅读3.5k次。一、 简述SVN版本控制服务SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion,也就是CVS的接班人!CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个..._svn-git

软件模拟spi接口 ,四种模式全支持_软件模拟spi需要分模式-程序员宅基地

文章浏览阅读1.2k次。1.0 .h需要定义的文件#define SET_GPIO(A) NRF_GPIO->OUTSET = (1UL << (A)) #define CLEAR_GPIO(A) NRF_GPIO->OUTCLR = (1UL << (A))#define READ_GPIO(A) NRF_GPIO->IN&(1<<(A))#..._软件模拟spi需要分模式

layui 获取select option 自定义属性_lay-options 获取-程序员宅基地

文章浏览阅读338次。最近在使用layui开发项目后台, 遇见这个问题, 记录一下, 方便自己和大家查看需要根据类型 展示不同表单内容_lay-options 获取

ZigBee 3.0 EmberZNet EFR32MG 学习笔记-9-Network Steering加网流程_zigbee network steering-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏11次。转载请注明出处,谢谢!Newbit-Msming 2018-10-18ZigBee 3.0 EmberZNet EFR32MG 学习笔记-目录ZigBee 3.0 EmberZNet EFR32MG 学习笔记-9-Network Steering加网流程环境:Windows 10、Simplicity Studio 4SDK: EmberZnet SDK 6.4.0.0工程:新建..._zigbee network steering