最近在网上看到了一种学习方法名叫费曼学习法,说的是学习一个东西的时候,要尝试着给别人讲出来,就是一种备课式的学习。

第一步,选择一个你想要理解的概念, 然后拿出一张白纸, 把这个概念写在白纸的最上边。
第二步,设想一种场景,你正要向别人传授这个概念在白纸上写下你对这个概念的解释, 就好像你正在教导一位新接触这个概念的学生一样。当你这样做的时候, 你会更清楚地意识到关于这个概念你理解了多少, 以及是否还存在理解不清的地方。
第三步,如果你感觉卡壳了, 就回顾一下学习资料,无论何时你感觉不清楚了, 都要回到原始的学习资料并重新学习让你感到不清楚的那部分,直到你领会得足够顺畅, 顺畅到可以在纸上解释这个部分为止。
第四步,为了让你的讲解通俗易懂,简化语言表达最终的目的, 是用你自己的语言, 而不是学习资料、课程中的语言来解释概念。如果你的解释很冗长或者令人迷惑, 那就说明你对概念的理解可能并没有你自己想象得那么顺畅,你要努力简化语言表达, 或者与已有的知识建立一种类比关系, 以便更好地理解它。

我觉得费曼学习法很不错,可以运用到日常的学习中。从这个意义上来说,写博客就显得是一件很明智的事情了,因为你就是把你所理解的东西再讲出来。

闲话就到这里,开始今天的学习吧。

1、异常的处理:

  python的异常处理和 java 相似性很高,下面是常有的异常处理代码格式:

try:
<语句>
except <异常1>:
<语句>
except <异常2>:
<语句>
else:
<语句>
try:
<语句>
finally:
<语句>

  对于catch语句,有多种写法:

except:                                      #捕获所有异常
except <异常名>: #捕获单个异常
except (异常名1,异常名2): #捕获多个异常
except <异常名> as <数据>: #捕获指定异常及附加信息
except (异常名1,异常名2) as <数据>: #捕获多个异常及附加信息

  代码示例如下: 

#!/usr/bin/python
l = [1,2,3,4,5];
print('---start---');
try:
print(l[6]);
except: # except 为 try的代码 发生异常时执行。except 是一个总类,所有异常都可以捕获
print('error');
else: # else 为 try的代码 没有引发异常时执行
print('no error');
finally: # finally 为不管 try的代码 是否异常都执行
print('finally code');
print('---end---'); # 其他语句
#!/usr/bin/python
l = [1,2,3,4,5];
print('---start---');
try:
print(l[6]);
finally: # finally 为不管 try的代码 是否异常都执行
print('finally code'); # 发生异常,但是此语句是执行了的
print('---end---'); # 其他语句,没有执行
#!/usr/bin/python
# 不同类型的异常区分处理
l = [1,2,3,4,5];
print('---start---');
try:
print(l[6]);
except ZeroDivisionError:
print('ZeroDivisionError');
except IndexError as data:
print('IndexError:');
print(data); # 打印异常信息
else: # else 为 try的代码 没有引发异常时执行
print('no error');
finally: # finally 为不管 try的代码 是否异常都执行
print('finally code');
print('---end---'); # 其他语句

  上面的第二个代码,看到了两个异常 ZeroDivisionError 和 IndexError ,那么常见的异常有哪些呢?

AttributeError            调用不存在的方法引发的异常
EOFError 遇到文件末尾引发的异常
ImportError 导入模板出错引起的异常
IndexError 列表越界异常
IOError I/O操作引起的异常
KeyError 使用字典中不存在的变量名应发的异常
NameError 使用不存在的变量名引发的异常
TabError 语句缩进不正确异常
ValueError 搜索列表中不存在的值引发异常
ZeroDivisionError 除数为0引发的异常

  在python中,如果多种异常的处理是一样的,那么可以把两个异常写在一块儿:

#!/usr/bin/python
# 不同类型的异常区分处理
l = [1,2,3,4,5];
print('---start---');
try:
print(l[6]);
except ZeroDivisionError:
print('ZeroDivisionError');
except (IndexError,TabError): # 两个异常同样的处理
print('IndexError or TabError');
else: # else 为 try的代码 没有引发异常时执行
print('no error');
finally: # finally 为不管 try的代码 是否异常都执行
print('finally code');
print('---end---'); # 其他语句

2、用代码抛出异常

  上面所说的是Python内置异常,在脚本中,还可以使用 raise 语句手动引发异常。在类中也可以使用 raise 引发异常,并向异常传递数据。

raise 异常名
raise 异常名,附加数据
raise 类名

  简单使用一下raise:

#!/usr/bin/python
print('---start---');
try:
raise Exception
except Exception:
print('Exception');
else:
print('no error');
print('---end---'); # 其他语句

  实际应用中应该是这样的:

#!/usr/bin/python
def add(x,y):
if x == 0 or y == 0:
raise ZeroDivisionError('x or y is 0');
return x+y; try:
print('run 1');
a = add(1,2);
print(a);
print('run 2');
b = add(1,0);
print(b);  # 这里没有打印,因为上一行异常了
except ZeroDivisionError as data:
print(data);

  assert语句的使用:assert语句同样可以引发异常,但与raise不同,assert语句在条件测试为假时,才引发异常。

assert <条件测试>,<异常附加信息>

  assert的例子:

#!/usr/bin/python
import traceback def add(x,y):
assert x != 0 and y != 0 , 'x or y is 0';
return x+y; try:
print('run 1');
a = add(1,2);
print(a);
print('run 2');
b = add(1,0);
print(b);
except:
# traceback.print_exc() # 使用python中的traceback模块,跟踪错误
f=open("D:/tmp/pyError.log",'a+')
traceback.print_exc(file=f) # 将报错输入到文件中
f.flush()

  assert 相当于 raise 语句 和 if 语句联合使用,但是assert语句一般用于开发自测。只有__debug__为true是,assert 才有效。

3、自定义异常类

  python中可以通过继承Exception类来创建自己的异常类:  

#!/usr/bin/python

class MyError(Exception):
def __init__(self,data):
self.data = data;
def __str__(self):
return "MyError:"+self.data; try:
raise MyError('0.0');
except Exception as e:
print(e);

【python学习-6】异常处理的更多相关文章

  1. 4月18日 python学习总结 异常处理、网络编程

    一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2 ...

  2. Python学习之--异常处理

    Python中的Exceptions是所有异常的基类,内置的异常类都放在了exceptions模块中,通过dir()函数可以看到这些内置的类 通过raise 语句触发异常,如 >>> ...

  3. Python学习 :异常处理

    异常处理 什么是异常处理 - python解释器检测到错误,触发异常(也允许程序员自己触发了异常) - 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,只与异常处理有关) - 如果 ...

  4. Python学习之异常处理

    1.首先了解错误和异常的概念: 错误:代码运行前的代码错误或者是程序执行过程中的逻辑错误 1:语法错误:代码不符合解释器或者编译器语法(代码错误) 2:逻辑错误:不完整或者不合法输入或者计算出现问题( ...

  5. Python学习--12 异常处理、调试

    异常捕获 语法格式: try: pass except xxx as e: pass except xxx as e: pass ... else: pass finally: pass except ...

  6. python学习总结----异常处理

    相关概念 - 错误:程序运行之前的语法错误,如:关键字.缩进不齐.括号不成对. - 异常:在程序运行过程中出现的问题,如:除数为0.对象属性不存在等. 异常处理 - 说明:异常处理可以理解为特殊的流程 ...

  7. Python学习笔记(异常处理)

    用户输入了一个不合规定的值,或者需要打开的文件不存在.这些情况被称作“异常”,一个好的程序需要能处理可能发生的异常,避免程序因此而中断. 例如我们去打开一个文件: f = file('non-exis ...

  8. python学习之----异常处理小示例

    网络是十分复杂的.网页数据格式不友好,网站服务器宕机,目标数据的标签找不到,都 是很麻烦的事情.网络数据采集最痛苦的遭遇之一,就是爬虫运行的时候你洗洗睡了,梦 想着明天一早数据就都会采集好放在数据库里 ...

  9. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  10. Python学习系列(九)(IO与异常处理)

    Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Pytho ...

随机推荐

  1. 免费的馅饼 HYSBZ - 2131 (树状数组维护二维偏序)

    题目链接:https://cn.vjudge.net/problem/HYSBZ-2131 题目大意:中文题目 具体思路:对于任意的两个位置,posA和posB,我们可以如下推导. |posA-pos ...

  2. 电子邮件和URL输入控件

    HTML5还引入了让用户输入邮箱地址和URL的输入控件.那些不支持这类输入控件的浏览器会把他们当成普通文本框来处理. <!DOCTYPE html> <!-- To change t ...

  3. Jetson tk1 刷机教程

    前期准备: 1.  Jetson TK1开发板. 2.  安装有ubuntu系统的PC(或者ubuntu虚拟机)切记:不管是PC还是虚拟机,务必确保有大于5G的存储空间,之后安装过程会作详细解释. 3 ...

  4. V4L2学习记录【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637600.html V4L2学习记录 这个还没有分析完,先在这放着,防止电脑坏掉丢了,以后再完善 V4L ...

  5. jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码

    一.运行程序TestGC 二.用jps找出当前应用的进程号PID 到jdk安装目录的bin目录下输入: jps -l PID为1264 三.启动Process Explorer(下载地址:https: ...

  6. oracle flashback 后主键及索引更改问题

    oracle flashback 后 主键会变为bin开头,如果删除可以采用将sql复制出单独窗口,然后加上“”执行

  7. 2017-05~06 温故而知新--NodeJs书摘(一)

    前言: 毕业到入职腾讯已经差不多一年的时光了,接触了很多项目,也积累了很多实践经验,在处理问题的方式方法上有很大的提升.随着时间的增加,愈加发现基础知识的重要性,很多开发过程中遇到的问题都是由最基础的 ...

  8. linux下的文件结构

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令/dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如 ...

  9. laravel migrate 指定执行部分 migration

    由于我不习惯于使用 laravel migration 来管理数据表变更,所以很多项目都是无法直接执行 php artisan migrate 否则会报错 SQLSTATE[42S01]: Base ...

  10. 性能测试三十三:监控之Linux系统监控命令大全

    1.top命令top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top - 01:06:48 up 1: ...