9月13日学习内容整理:异常处理

一、异常处理

1、排错:多行报错的时候,真正报错的是最下面;若报错的地方在别人的代码里,注意别人写的代码是不会报错的,还是找自己的错

2、特点:一旦发生异常,程序不会再向下执行

3、处理方法:

(1)用if语句去规避,但是成本太高

(2)没法用if处理的报错,就用异常处理去解决报错

4、异常处理的办法

(1)try和except的组合:

try:
    a
except NameError:
    print(123)
1)try中是要执行的代码,当遇到except后面的错误类型时就会执行except中的代码,try中的代码就会停留在异常报错的地方,并且
不会向下执行,当except中的代码处理完后,程序就会继续向下执行try和except语句外部的代码
2)try和except是一体的,不能分开用
3)except只能处理一种报错类型,所以except可以有多个分支去处理多个报错类型
try:
    num = input('num : ')
    int(num)  # ValueError
    print(num)
    a
    sum(1, 2, 3)
except ValueError:
    print('请输入一个数字')
except NameError as nameerror:
    print('产生了一个%s'%nameerror)
except TypeError:
    print('又一个错误诞生了')

(2)as语句的用法:except  异常类型  as  变量名:print(变量名)变量名就是这个异常类型的具体内容

            一般用在不确定错误的内容是什么

(3)万能异常:except  Exception:就代表所有的异常类型,都可以进行处理

                   放在所有except分支的最后

                   对于预料不到的异常用万能,能预料到的异常还是用分支去处理

(4)try except和else的组合:

若try中的代码被顺利执行并且没有出发异常处理(except),程序就会执行else中的代码。跟for和while中的else用法类似

(5)try except和finally的组合

1)finally语句中的代码不管有没有触发异常处理(except)都会被执行

2)主要做一些清理的工作,例如关闭文件,因为try中的遇到异常就会停止不会向下执行。避免因为程序异常造成的浪费资源和逻辑问题

3)注意和函数的用法:当函数的return在finally的前面时,函数运行到return时不会停止,而是会继续执行finally中的代码,当finally中的代码执行完后,函数才停止,然后外部接受的返回值才能打印出来

(6)try except else和finally的组合:这就是一个完整的异常处理机制。

(7)主动触发异常:raise 异常类型  目的就是告诉别人这里需要修改

(8) 断言:相当于if判断

assert 条件  条件不成立时下面的代码不会执行。可以用来对使用者进行一些条件的约束

 

注意:

1、异常处理不要随意用,写个代码就用一下,异常处理是为了规避一些潜在的报错以提高用户体验度

2、try语句里的代码要尽量少,在代码开发阶段不要随意调用函数,这样的话函数里的错误就不会显示了;在代码应用阶段为防止用户使用时函数频繁报错就可以在try语句中调用函数。

 

 

 

 

常用异常:

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

 

posted @ 2017-09-13 11:54  九二零  阅读(85)  评论(0)    收藏  举报