文档章节

Python入门教程系列:一、异常处理

东方神剑
 东方神剑
发布于 2015/02/14 20:57
字数 1658
阅读 260
收藏 18
点赞 0
评论 0

    前面几章,我们已经把Python的基础内容简单说了一些,从这章开始,我们算是入门级别的学习了,主要把剩下的一些内容说一下,主要包括异常处理、模块的使用、函数的使用、面向对象、正则匹配、数据库、网络(爬虫),最后我们会有一个关于机器学习的高级系列教程。

    异常处理,用最通俗的话说,就是你的程序出错了,这错误也分好几种,有的可能是语法错误,比如你多写少写错写个字符等,也有逻辑错误,比如1>2,语法上没错误但是逻辑错误,对于初级选手来说,犯得最多的错误就是马虎,也就是语法错误,对于菜鸟级的犯得最多的错误是你认为你的代码可以那么那么运行,实际上完全不是那么运行的,甚至你就是盯着代码看好久你也不知道哪错了,总认为程序是按照1、2、3步来的,实际上是按照1、3步来的,第2步无论如何也不会运行,这就是可能你对某些语法的结构还不是真的很清楚。

    当然这不意味着只要你仔细点,只要你对语法结构都很清楚你就不会犯错,错误时刻都有可能发生,比如人为的故意错误操作等,所以出错不可怕,不出错的程序才可怕,。问题是我们怎么样使我们的程序有较强的健壮性,即使出现错误,发现错误也可以继续工作而不是崩溃。

我们先举几个例子看一下:

第一个例子是变量未定义错误,通常我们编程序时也不需要格外定义个变量名,但是可以直接使用,也没出错啊,怎么在这就不行了?比如,我们定义个字符串'python',通常我们直接写  str1 = 'python'就可以了,也没格外先定义str1,其实字符串本身也是个对象,我们定义了个str1对象(对象类型未知),然后对其赋值(此时对象类型明确为字符串),这是正确的语法,而单纯写个str1就是错误的,对象类型未知的空对象。

第二个例子是除以0错误,地球人都知道

第三个语法格式错误,SyntaxError是唯一一个在编译时的错误提示,也就是说你的程序结构错误,在这里是说for语法错误

第四个错误是数组越界错误,本来就3个东西,你想找第4个肯定找不到要出错

第五个错误是字典要查询的键不存在。

第六个错误是文件不存在错误,这种错误十有八九不是说真的不存在,而是路径写的不全或者写错了

当然还有其他的错误,这里只是举了几个常见的。

错误检测和异常处理:

1、try-except

2、try-finally

3、try-except-finally

都是什么意思呢?try-except就是将可能出错的代码放到try里,就是试试的意思,如果有可能出错我们就在except语句中给出解决方案,当然这个错误类型可能有好几种,所以这个except就可以有好几个,不过要注意的是先匹配具体的错误也可以说的小范围的错误,然后在匹配大范围的错误,这是什么道理呢?比如错误1包含错误2,那么你先匹配错误1,那么无论如何错误2都不会再被匹配了,也就是说错误2给出的处理方案永不可达,这就是逻辑错误了。finally就是无论是否出错都会运行finally中的代码,所以finally最多只允许出现一次。上面给出3种搭配方案。

下面举个例子给大家看一下,说的再多不如演示一个。

>>> try:
... f = open('blah', 'r')
... except IOError, e:
... print 'could not open file:', e
...
could not open file: [Errno 2] No such file or directory

try 语句块中异常发生点后的剩余语句永远不会到达(所以也永远不会执行). 一旦一个异常被引发, 就必须决定控制流下一步到达的位置. 剩余代码将被忽略, 解释器将搜索处理器, 一旦找到,就开始执行处理器中的代码.如果没有找到合适的处理器, 那么异常就向上移交给调用者去处理, 这意味着堆栈框架立即回到之前的那个. 如果在上层调用者也没找到对应处理器, 该异常会继续被向上移交, 直到找到合适处理器. 如果到达最顶层仍然没有找到对应处理器, 那么就认为这个异常是未处理的, Python 解释器会显示出跟踪返回消息, 然后退出.

多个except的例子:

def safe_float(obj):
    try:
        retval = float(obj)
        except ValueError:
        retval = 'could not convert non-number to float'
        except TypeError:
        retval = 'object type cannot be converted to float'
        return retval

捕获所有的异常:

所有错误的根就是Exception,它是处于最顶层的。

try:
        :
except Exception, e:
    # error occurred, log 'e', etc.

虽然这样的代码捕获大多异常, 但它不是好的 Python 编程样式. 一个主要原因是它不会考虑潜在的会导致异常的主要原因.

 try:
        :
except Exception, e:
    # error occurred, log 'e', etc.

except ValueError:

     ……

这种写法就是错误的,因为无论Exception包含ValueError错误,所以……中的语句无论如何也不会运行。

这里再提个小插曲,else语句在try-except中也可以使用,如果错误未匹配可以运行else语句中的内容。

try:
A
except MyException: B
else: C
finally: D

 

try:
    try_suite
finally:
    finally_suite #无论如何都执行

综合了这一章目前我们所见过的所有不同的可以处理异常的语法样式:

try:
    try_suite
except Exception1:
    suite_for_Exception1
except (Exception2, Exception3, Exception4):
    suite_for_Exceptions_2_3_and_4
except Exception5, Argument5:
    suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
    suite_for_Exceptions6_and_7_plus_argument
except:
    suite_for_all_other_exceptions
else:
    no_exceptions_detected_suite

finally:
    always_execute_suite

关于异常捕获处理的更多内容可参考《Python核心编程》第十章内容,谢谢。

© 著作权归作者所有

共有 人打赏支持
东方神剑

东方神剑

粉丝 64
博文 126
码字总数 93166
作品 0
朝阳
程序员
给伸手党的福利:Python 新手入门引导

这是一篇 Python 入门指南,针对那些没有任何编程经验,从零开始学习 Python 的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。 在这个信...

crossin
06/15
0
0
[雪峰磁针石博客]python数据分析快速入门教程2-pandas数据结构

Title: python数据分析快速入门教程2-pandas数据结构 Date: 2018-03-31 9:20 Category: 数据分析 Slug: pythonpandascrash_tutorial2 [雪峰磁针石博客]python数据分析快速入门教程1-开胃菜 ...

Python测试开发人工智能
07/10
0
0
年薪20万Python工程师进阶(1):Python 资源 + 经典练手项目

Python 越来越火爆,最近自己也在学习。整理下一些 Python 资料,和练手的项目。希望对你学习 Python 有所帮助。 1、入门阶段 1 Python 官网 Python 官网 The Python Tutorialdocs.python.o...

程序员八阿哥
05/11
0
0
关于深度学习的学习资料免费送给你

一、免费书籍随意读: 1.《深度学习之美:AI时代的数据处理与最佳实践》本书作者张玉宏博士在阿里云云栖社区为读者免费呈现部分书中文字: 一入侯门“深”似海,深度学习深几许(深度学习入...

【方向】
06/27
0
0
Python系列英文原版电子书

【专题推荐】Python系列英文原版电子书 http://down.51cto.com/zt/104 python简明教程(CHM) http://down.51cto.com/data/49213 Linux黑客的python编程之道【pdf】推荐 http://down.51cto.co...

best_raven
2015/08/21
0
0
5本必读Python入门书籍,你都看过吗?(附福利)

今天技术学派为大家准备了5本Python入门书籍,除了书籍小编还整理了3个常用的资源网站分享给大家。 1.Python基础教程 《Python基础教程》是经典的Python入门教程书籍,本书层次鲜明,结构严谨...

Python燕大侠
06/07
0
0
Python学习路线(针对具备一定编程经验者)

相比C,C++,JAVA等编程语言,Python是易学的。但要想深入地理解Python,并熟练地编写Python风格的Python代码。我想还是有一长段路程要走的。下面即是我的一点经验总结,主要是为了整理自己学习...

Thebreezecomes
06/28
0
0
80个Python经典资料(教程+源码+工具)汇总——下载目录

大家好,51CTO下载中心根据资料的热度和好评度收集了80个Python资料,分享给Python开发的同学。内容包括1个Python专题、66个学习资料、7套Python源码和6个相关软件。附件较多,无法一一分享,...

icheer
2012/07/02
0
0
Django入门指南-第1部分(环境搭建)

前言 今天我将开始一个关于 Django 基础知识的全新系列教程。这是一个开始学习 Django 的完整入门指南。教程材料一共会被分为七个部分。我们将从安装,开发环境的准备,模型,视图,模板,U...

刘志军
03/08
0
0
Anaconda教程,非著名Python程序员解说

到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示说在安装这个工具前必须先安装一堆其他不明所以的工具? 大多数 Python 的初学者们都曾为...

Python新世界
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
6分钟前
0
0
CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
17分钟前
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
22分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
25分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
33分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
36分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
37分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
40分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
43分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部