python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析

关于选课程序,最近着实有点忙,没机会复习os、pickle两部分模块,所以数据储存和字典读取成为了一个问题,大致原理知道,但是具体操作可能还是得返回去再好好看看,所以目前就提前开始学习新的知识了,虽然今天感觉str的相关方法忘的是干干净净的,但是我有pycharm。

今天主要内容是关于异常,其实有点想最开始刚学的感觉,比较简单。

异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下:

错误被分为了两种:

1.语法错误,基本pycharm都会帮你显示出来,不该犯的

2.逻辑错误,不太容易看出来,pycharm也不管,只有Python解释器是真爱,但是也得等到真的运行的时候

#TypeError:int类型不可迭代

for i in 3:

pass

#ValueError

num=input(">>: ") #输入hello

int(num)

#NameError

aaa

#IndexError

l=['egon','aa']

l[3]

#KeyError

dic={'name':'egon'}

dic['age']

#AttributeError

class Foo:pass

Foo.x

#ZeroDivisionError:无法完成计算

res1=1/0

res2=1+'str'

下面是今天最为重要的部分:

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误

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

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

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

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

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

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

KeyboardInterrupt Ctrl+C被按下

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

SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

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

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

导致你以为正在访问它

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

更多异常(有空还是要挨个错一遍):

ArithmeticError

AssertionError

AttributeError

BaseException

BufferError

BytesWarning

DeprecationWarning

EnvironmentError

EOFError

Exception

FloatingPointError

FutureWarning

GeneratorExit

ImportError

ImportWarning

IndentationError

IndexError

IOError

KeyboardInterrupt

KeyError

LookupError

MemoryError

NameError

NotImplementedError

OSError

OverflowError

PendingDeprecationWarning

ReferenceError

RuntimeError

RuntimeWarning

StandardError

StopIteration

SyntaxError

SyntaxWarning

SystemError

SystemExit

TabError

TypeError

UnboundLocalError

UnicodeDecodeError

UnicodeEncodeError

UnicodeError

UnicodeTranslateError

UnicodeWarning

UserWarning

ValueError

Warning

ZeroDivisionError

为了保证程序的健壮性与容错性,即在遇到错误时程序不会崩溃,我们需要对异常进行处理,

如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防

之前也是有操作过的:

AGE=10

while True:

age=input('>>: ').strip()

if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的

age=int(age)

if age == AGE:

print('you got it')

break

如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理

#基本语法为

try:

被检测的代码块

except 异常类型:

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

#举例

try:

f=open('a.txt')

g=(line.strip() for line in f)

print(next(g))

print(next(g))

print(next(g))

print(next(g))

print(next(g))

except StopIteration:

f.close()

#1 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

s1 = 'hello'

try:

int(s1)

except IndexError as e: # 未捕获到异常,程序直接报错

print e

#2 多分支

s1 = 'hello'

try:

int(s1)

except IndexError as e:

print(e)

except KeyError as e:

print(e)

except ValueError as e:

print(e)

#3 万能异常Exception

s1 = 'hello'

try:

int(s1)

except Exception as e:

print(e)

#4 多分支异常与万能异常

#4.1 如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么骚年,大胆的去做吧,只有一个Exception就足够了。

#4.2 如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。

#5 也可以在多分支后来一个Exception

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)

#6 异常的其他机构

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)

else:

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

finally:

print('无论异常与否,都会执行该模块,通常是进行清理工作')

#7 主动触发异常

try:

raise TypeError('类型错误')

except Exception as e:

print(e)

#8 自定义异常

class EgonException(BaseException):

def __init__(self,msg):

self.msg=msg

def __str__(self):

return self.msg

try:

raise EgonException('类型错误')

except EgonException as e:

print(e)

#9 断言:assert 条件

assert 1 == 1

assert 1 == 2

#10 总结try..except

异常捕捉的优势:

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

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

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

主要是理论知识,后期使用才是关键,就像我要复习的pickle和os模块一样,就是这些了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图纸管理软件_造价20万以内的农村别墅长啥样?挑选5套图纸,让城里人羡慕吧...

在老家盖房算是一件“光宗耀祖”的事情,现在的物价高,想盖一栋房随便都要几十万,对于一般家庭来说,要拿出这笔数字并不是一件容易的事,通常大家的预算都有限,希望能花最少的钱盖最好的房,这种心…

python读取文件内容操作_Python 3.6 读取并操作文件内容

下面为大家分享一篇Python 3.6 读取并操作文件内容的实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧所使用python环境为最新的3.6版本Python中几种对文件的操作方法:将A文件复制到B文件中去(保持原来格式)读取文件中的内容,返回…

python scikit learn 关闭开源_慕课|Python调用scikit-learn实现机器学习(一)

一、机器学习介绍及其原理1.什么是人工智能?机器对人的思维信息过程的模拟,让它能相认一样思考。a.输入 b.处理 c.输出根据输入信息进行模型建构、权重更新,实现最终优化。特点:信息处理、自我学习,优化升级2.人工智能…

python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息

全国行政区划信息查询平台地址:http://xzqh.mca.gov.cn/map 检查网页源码: 检查网页源码可以发现: 所有省级信息全部在javaScript下的json中,会在页面加载时加载json数据,填充到页面的option中。 1.第一步&#xff1…

风变编程python论文_如何看待风变编程的 Python 网课?

作为风变推出的python课程的一名学员,很幸运能与风变相遇,更庆幸自己选择学习python,我学习的是python基础课程和爬虫精进课程,目前已经学完了python基础课程,不得不说对我的感触很深,非常想要继续学下去&a…

32利用文件系统保存数据_网易技术实践|Docker文件系统实战

在本文中,我们来实战构建一个Docker镜像,然后实例化容器,在Docker的生命周期中详细分析一下Docker的文件存储情况和DockerFile优化策略。在开始实战之前,我们先介绍一个概念,联合文件系统(Union File Syste…

POI读取word文件,(支持HSSF和XSSF两种方式)

POI读取word文件&#xff0c;&#xff08;支持HSSF和XSSF两种方式&#xff09; 参考&#xff1a;HSSF&#xff0c;XSSF&#xff0c;SXSSF三种方式 1.引用maven&#xff08;版本必须一致&#xff09; <dependency><groupId>org.apache.poi</groupId><art…

pythonsqlite事务_python sqlite3 的事务控制

Python sqlite3 的事务控制官方文档的描述&#xff1a;Controlling TransactionsBy default, the sqlite3 module opens transactions implicitly before a Data Modification Language (DML) statement (i.e. INSERT/UPDATE/DELETE/REPLACE), and commits transactions implic…

二叉树遍历的超简单方法(详细、简单)

二叉树遍历的超简单方法 参考链接&#xff1a;https://wenku.baidu.com/view/e5463e4203d8ce2f0166230a.html 已修改部分问题。 三种常见二叉树的遍历&#xff1a; 先序遍历的递归算法定义&#xff08;简称根左右&#xff09; 若二叉树非空&#xff0c;则依次执行如下操作&a…

怎么看我装的sql能不能用_深入浅出sql优化(三)之单表索引优化

大家好&#xff0c;我是闲水&#xff0c;每天更新java最新最热技术&#xff0c;对java感兴趣的朋友记得关注一下哦。注意 &#xff1a;这是SQL性能优化第三章&#xff0c;点击关注查看前置内容。上篇文章我们主要了解了索引优化的标尺"Explain"怎么用&#xff0c;这一…

java类加载顺序(spring容器下)

执行顺序&#xff1a;父类静态块–>子类静态块–>父类非静态块–>父类构造方法–>子类非静态块–>子类构造方法–>自动装载的方法 子类和父类均加上Service注解&#xff0c;将其交给spring容器管理。 父类&#xff1a; Service public class Father {publ…

python 绘图 hist bin参数_Python-hist,distplot bin宽度不一致问题的解决方案

python的hist有一个bug&#xff0c;之前一直没有解决。绘制直方图的时候&#xff0c;往往出现两组数据由于分布不一样&#xff0c;&#xff0c;导致出来的图片中&#xff0c;虽然是一样数目的bins&#xff0c;但是bin的宽窄不同。而我想得到的是&#xff0c;&#xff0c;虽然数…

Nginx反向代理的使用

1. 常用服务器比较 apache: 功能完善&#xff0c;历史悠久&#xff0c;模块支持非常丰富&#xff0c;属于重量级产品&#xff0c;比较耗费内存。缺点:处理每一个php比较费资源&#xff0c;导致如果高并发时会耗费服务器资源无法处理更多请求。 lighttpd: 内存开销低&#xff0…

python继承语法_python中继承父类的例子(python3的语法)

#codingutf8class Cup:#构造函数&#xff0c;初始化属性值def __init__(self,capacity,color):self.capacitycapacityself.colorcolordef retain_water(self):print("杯子颜色&#xff1a;"self.color"&#xff0c;杯子容量&#xff1a;"self.capacity&quo…

Rabbit发送消息,消费者消费异常

Rabbit发送消息&#xff0c;消费者消费异常 背景&#xff1a; 在步骤1下创建订单&#xff0c;步骤2下提交消息 Transactionalpublic void tradeHandler(Map map) { // 1.生成统一订单 var unifyOrder orderService.create(orderService.getUnifyOrderDTO(fee, alipayOrder));…

jwt token 太长_理解 JWT 鉴权的应用场景及使用建议

JWT 介绍JSON Web Token(JWT)是一个开放式标准(RFC 7519)&#xff0c;它定义了一种紧凑(Compact)且自包含(Self-contained)的方式&#xff0c;用于在各方之间以JSON对象安全传输信息。这些信息可以通过数字签名进行验证和信任。可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥…

如何使用explain进行SQL语句调优

参考&#xff1a;https://mp.weixin.qq.com/s/kYcrHtE82-sOqNOp_qM4Ig

microsoft vbscript编译器错误怎么解决_win7系统ie应用程序错误怎么办 ie应用程序错误解决方法【详解】...

windows系统自带的ie浏览器很少用户会去使用到&#xff0c;它运行起来比其他的浏览器要慢很多&#xff0c;而且经常会出现各种各样的问题&#xff0c;最近有位win7系统用户&#xff0c;在使用ie浏览器的时候&#xff0c;发生了应用程序错误的情况&#xff0c;那么win7系统ie应用…

简述python爬虫_python爬虫入门篇了解

1. 爬虫分类&#xff1a;1.1 通用爬虫&#xff1a;例如搜索引擎&#xff1a;无差别的收集数据&#xff1b;提取存储关键字&#xff1b;构建索引库&#xff1b;给用户提供搜索接口。1.2 聚焦爬虫&#xff1a;有针对性的编写特定领域数据的爬取程序。2. Robots协议&#xff1a;指…

修改固态硬盘的物理序列号_买固态怕踩坑?收下这些软件,轻松鉴别好坏

再有半个月&#xff0c;就迎接年中的促销旺季。不少朋友都希望趁着各种优惠、跳楼价&#xff0c;组一台梦想机、升级一下自己的电脑。说到体验升级&#xff0c;相信就算是DIY新手和硬件小白都知道&#xff0c;要想电脑快&#xff0c;必须选固态。但是固态参数多&#xff0c;又是…