python异常处理
常见的异常处理:
AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python 语法错误
SyntaxError: positional argument follows keyword argument #参数顺序错误
TypeError 传入对象类型与要求的不符合
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
可能是os在创建目录时,文件名称不对所导致。 OSError: [Errno 22] Invalid argument: 'D:\\python\\xxxx\\2020-03-03 16:20:51.zip'
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
RecursionError
RecursionError: maximum recursion depth exceeded while calling a Python object #产出递归限制,默认为1000
StandardError
StopIteration
当迭代器利用next来取值,一个next取对应一个值,如果迭代器里值取完了,还要取那么就会报StopIteration错误。
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时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!
在使用的时候一定要注意书写位置因为当出现异常后会将执行的代码关闭,同样循环也会关闭,所以最好放在循环内执行,除非说当出错后循环也关闭。
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__
像缩进错误,语法错误是肯定抓取不到的。所以需要相当留意。
主动触发异常:
class yichang(Exception):
def __init__(self,yc):
self.yc = yc
try:
raise yichang('出现异常。') #异常为异常的名称。当出现异常名称时,就会打印出现异常。
except yichang as c:
print(c)
断言:
assert
就是提前判断结果的类型是否是自己要求的类型,如果是那么将会继续往下走,如果不是那么将会报错。
a = 'xuan'
assert type(a) is int
print('1111111')
assert type(a) is int
AssertionError

浙公网安备 33010602011771号