python异常处理

常见的异常处理:

AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError 使用一个还未被赋予对象的变量

SyntaxError Python 语法错误

1
SyntaxError: positional argument follows keyword argument   #参数顺序错误

TypeError 传入对象类型与要求的不符合

1
2
3
4
5
TypeError: 'type' object is not subscriptable     # 没有这种type类型。
TypeError: 'int' object is not iterable    #iterable(迭代),表示整数无法被循环
TypeError: a() missing 1 required positional argument: 'c'   #位置参数缺少
TypeError: a() takes 2 positional arguments but 3 were given   #位置参数过多
TypeError: a() got multiple values for argument 'b'           #将多个参数附加给一个值中。

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

1
2
可能是os在创建目录时,文件名称不对所导致。
OSError: [Errno 22] Invalid argument: 'D:\\python\\xxxx\\2020-03-03 16:20:51.zip'

OverflowError

PendingDeprecationWarning

ReferenceError

RuntimeError

RuntimeWarning

RecursionError

1
2
RecursionError: maximum recursion depth exceeded while calling a Python object  
#产出递归限制,默认为1000

StandardError

StopIteration

当迭代器利用next来取值,一个next取对应一个值,如果迭代器里值取完了,还要取那么就会报StopIteration错误。

1
2
3
4
5
6
7
8
9
10
l1 = [1,2,3,4,5,6]
obj1 = l1.__iter__()
print(obj1.__next__())
print(obj1.__next__())
print(obj1.__next__())
print(obj1.__next__())
print(obj1.__next__())
print(obj1.__next__())
print(obj1.__next__())
print(obj1.__next__())

SyntaxError

SyntaxWarning

SystemError

SystemExit

TabError

TypeError

UnboundLocalError

UnicodeDecodeError

UnicodeEncodeError

UnicodeError

UnicodeTranslateError

UnicodeWarning

UserWarning

ValueError

Warning

ZeroDivisionError

 

抓取异常处理:

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

在使用的时候一定要注意书写位置因为当出现异常后会将执行的代码关闭,同样循环也会关闭,所以最好放在循环内执行,除非说当出错后循环也关闭。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
data = []
user = {}
 
try:
    data[0]
    user['xuan']
    open('test.tses')
 
except IndexError as e:     #IndexError 是错误信息,e是错误的描述。(2.7是, 3.X是as)
    print('列表错误,',e)
except KeyError as e:
    print('没有这个Key,',e)
except (IndexError,EOFError) as e:     #如果需要运行同一个处理方式,那么可以使用多个错误并排。
    print('列表错误,',e)
except Exception as e:            #这种是可以抓取绝所有的错误信息。建议使用在最后。
    print('出错了,',e) 
else:               #当没有任何错误时,显示一切正常。
    print('一切正常'
finally:
    print('不管有没有错,都会执行。')   #最后无论对错都会执行,如果遇到return也同样运行后返回。

上面的e是exception类的对象,打印出来像字符串,标明内部调用了__str__

像缩进错误,语法错误是肯定抓取不到的。所以需要相当留意。

主动触发异常:

1
2
3
4
5
6
7
class yichang(Exception):
    def __init__(self,yc):
        self.yc = yc
try:
    raise yichang('出现异常。')   #异常为异常的名称。当出现异常名称时,就会打印出现异常。
except yichang as  c:
    print(c)

断言:
assert
就是提前判断结果的类型是否是自己要求的类型,如果是那么将会继续往下走,如果不是那么将会报错。

1
2
3
4
5
a = 'xuan'
assert type(a) is int
print('1111111')
assert type(a) is int
AssertionError

 

posted @   新兵蛋Z  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示