文档章节

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

东方神剑
 东方神剑
发布于 2015/02/14 20:57
字数 1658
阅读 267
收藏 18

    前面几章,我们已经把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核心编程》第十章内容,谢谢。

© 著作权归作者所有

共有 人打赏支持
东方神剑

东方神剑

粉丝 68
博文 126
码字总数 93166
作品 0
朝阳
程序员
私信 提问
[雪峰磁针石博客]python数据分析快速入门教程2-pandas数据结构

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

Python测试开发人工智能
2018/07/10
0
0
分享我自己写的一套Python爬虫学习经验

最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多。学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴...

崔庆才
2015/02/23
3.7K
25
关于深度学习的学习资料免费送给你

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

【方向】
2018/06/27
0
0
[雪峰磁针石博客]python3快速入门教程11命令行自动化工具与pexpect

[雪峰磁针石博客]python3快速入门教程 命令行自动化与pexpect 简介 Pexpect 是一个用来启动交互式命令行子程序并对其进行自动控制的 Python 工具模块。 Pexpect 可以用来和像 ssh、ftp、pas...

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

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

程序员八阿哥
2018/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
6分钟前
0
0
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
7
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
8
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部