1,抓错方法

name = [0, 1, 2]
try:
name[3]
except IndexError as exc: # 抓单个错误,打印错误信息e
print(exc)
except (IndexError, KeyError) as exc: # 同时抓多个错误,不推荐!!
print(exc)
except Exception as exc: # 抓所有错误
print(exc)
else:
print('一切正常') # 一切正常时执行
finally:
print('不管有错没错,都执行') # 总是执行

1.1,顺序抓多个错误 

先匹配的先执行:

try:
f = open('missing')
except OSError: # 先执行OSError
print('It failed')
except FileNotFoundError:
print('File not found')

可以用mro打印异常的类层次结构:

>>>FileNotFoundError.__mro__  # 或FileNotFoundError.mro()
[<class 'FileNotFoundError'>, <class 'OSError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>]

1.2,重新抛出上一个异常

try:
int('N/A')
except ValueError as e:
print("didn't work:", e)
raise # 用raise重新抛出上一个异常 #didn't work: invalid literal for int() with base 10: 'N/A'
#ValueError: invalid literal for int() with base 10: 'N/A'

2,常见错误

  • AttributeError:试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  • IOError:输入/输出异常;基本上是无法打开文件
  • ImportError:无法引入模块或包;基本上是路径问题或名称错误
  • IndentationError:语法错误(的子类) ;代码没有正确对齐
  • IndexError:下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  • KeyError:试图访问字典里不存在的键
  • KeyboardInterrupt:Ctrl+C被按下
  • NameError:使用一个还未被赋予对象的变量
  • SyntaxError:Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  • TypeError:传入对象类型与要求的不符合
  • UnboundLocalError:试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
  • ValueError:传入一个调用者不期望的值,即使值的类型是正确的

3,自定义异常

自定义异常并调用该异常:

class MyException(Exception):
def __init__(self, msg):
self.message = msg
def __str__(self):
return self.message raise MyException('not a valid password') # 调用自定义异常

继承现有异常并调用该异常:

class AddressValueError(ValueError):
"""A Value Error related to the netmask.""" raise AddressValueError('not a valid address') # 调用继承了ValueError异常的自定义异常

  

4,断言assert

assert type(obj.name) is str  # 如果obj.name确实是str就继续往下走,否则报错

如果后面的程序很重要,就可以用断言

和if效果差不多,但是assert会报错,if不会报错而且还要写好几句

guxh的python笔记十一:异常处理的更多相关文章

  1. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

  2. 【Python笔记】异常处理

    1 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误. 当Pytho ...

  3. guxh的python笔记五:面向对象

    1,面向对象编程思想 类:一类具有相同属性的抽象 属性(静态属性):实例变量.类变量.私有属性 方法(动态属性):构造函数.析构函数(默认就有).函数.私有函数 对象/实例:类经过实例化后,就是对象/ ...

  4. guxh的python笔记二:函数基础

    1,函数的参数 1.1,查看函数的参数类型 def run(a, *args, b, **kwargs): return a + b 可以通过如下方式查看参数类型: import inspect k ...

  5. guxh的python笔记三:装饰器

    1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) tot ...

  6. guxh的python笔记十:包和模块

    1,包和模块 包package:本质就是一个文件夹/目录,必须带一个__init.__.py的文件 模块module:.py结尾的python文件 2,导入方法 import pandas, coll ...

  7. guxh的python笔记六:类的属性

    1,私有属性 class Foo: def __init__(self, x): self.x = x 类的属性在实例化之后是可以更改的: f = Foo(1) print(f.x) # 1 f.x ...

  8. guxh的python笔记四:迭代

    1,可迭代对象iterable,迭代器iterator,生成器generator 可迭代对象iterable: 实现__iter__方法的类.__iter__方法返回iterator或者generat ...

  9. guxh的python笔记七:抽象基类

    1,鸭子类型和白鹅类型 1.1,白鹅类型 白鹅类型对接口有明确定义,比如不可变序列(Sequence),需要实现__contains__,__iter__,__len__,__getitem__,__ ...

随机推荐

  1. angular2--Tour of Heroes学习和分析--路由

    引入路由模块时的一个报错 No base href set. Please provide a value for the APP_BASE_HREF token or add a base elem ...

  2. 《ASP.NET Core In Action》读书笔记系列四 创建ASP.NET Core 应用步骤及相应CLI命令

    一般情况下,我们都是从一个模板(template)开始创建应用的(模板:提供构建应用程序所需的基本代码).本节使用 Visual Studio 2017 .ASP.NET Core2.0和 Visua ...

  3. Kindle:自动追更之Calibre2脚本

    #!/usr/bin/env python2 # vim:fileencoding=utf-8 from __future__ import unicode_literals, division, a ...

  4. wm_concat函数的排序问题

    wm_concat在行转列的时候非常有用,但在行转列的过程中的排序问题常常难以控制. 可见下面例子: 准备测试表: drop table t; create table t (n number,m n ...

  5. python爬取指定新闻

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2894 给定一篇新闻的链接newsUrl,获取该新闻的全部信息 标题 ...

  6. mysql_study_4

    索引 ALTER TABLE 表名字 ADD INDEX 索引名 (列名); CREATE INDEX 索引名 ON 表名字 (列名); 索引的效果就是加快查询速度,当表中数据不够多的时候是感受不出他 ...

  7. 二分法bug修复

    public class Main { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,7,8,9,10}; int ...

  8. DUILIB UI创建过程

    函数调用过程: CDialogBuilder 内部过程循环创建控件树 上图中 在AttachDialog中设置窗口的主控件  并设置控件树的pm

  9. sourceTree 代码未同步合并

    在同一个分支下,提交代码会有代码合并情形. 1.未同步代码前,提交代码 2.提交报错 3. 拉取未同步的提交代码 4.点击提交到暂存区, 5. 暂存区变成2条,再点击推送. 6.sourceTree ...

  10. 安装redis报错 you need tcl 8.5 or newer in order to run redis test

    解决方法: wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar -zxvf tcl8.6.1-src.tar.gz -C ...