异常
- 异常处理的语法
try:
# 你感觉可能会崩溃的代码
except 异常名字:
# try语句出现异常的时候执行的代码
else:
# try语句中没有抛出异常的时候执行的代码
finally:
# 不管程序有没有抛出异常,都会执行的代码
try:
a = 1
b = 0
c = a/b
print(c)
except ZeroDivisionError:
print('try中的代码如果抛出异常,会执行这里的代码')
else:
print('try中的代码如果没有抛出异常,会执行这里的代码')
finally:
print('不管try中的代码有没有抛出异常,都会执行这里的代码')
- 使用多个except来捕获多个异常
try:
# a = 1
# b = 0
# c = a/b
print(c)
except ZeroDivisionError:
print('这个except语句只会捕获ZeroDivisionError异常')
except NameError:
pritn('这个except语句只会捕获NameError异常')
- 如果想要将多个异常放在一个except中捕获,那么可以使用元组的形式
try:
# a = 1
# b = 0
# c = a/b
print(c)
except (ZeroDivisionError,NameError):
print('这个except语句会捕获ZeroDivisionError和NameError异常')
- 如果你不知道具体会抛出什么异常,那么你可以使用Exception来接收所有的异常
try:
a = 1
b = 0
c = a/b
print(c)
except Exception as error:
print('不管抛出了什么异常,都会执行这里的代码')
print(error)
- 抛出异常
def greet(name,age):
if type(name) != str:
raise ValueError('name必须为str类型')
if type(age) != int:
raise ValueError('age必须为int类型')
try:
greet('zhiliao','18')
except ValueError as error:
print(error.args)
- 自定义异常
class ArgumentError(Exception):
def __init__(self,*args,**kwargs):
super(ArgumentError,self).__init__(*args,**kwargs)
# self.args = args
print('参数错误')
def greet(name,age):
if type(name) != str or type(age) != int:
raise ArgumentError('参数类型错误')
print('my name is:%s,my age is:%s' % (name,age))
try:
greet('zhiliao','18')
raise ArgumentError('name必须为str类型')
except Exception as error:
print(error.args)
AttributeError 属性错误,访问一个对象的不存在的属性的时候,抛出这个异常
ImportError 导入包错误
IndexError 下标错误,一般有列表越界等
KeyError key错误,一般访问字典的key不存在的时候
NameError 变量名不存在
NotImplementedError 某个方法没有实现的错误
StopIteration 迭代器已经到最后了
IndentationError 缩进错误
TabError 包含了tab和空格错误
TypeError 类型错误,有时候传递了一个错误类型的值给其他函数
UnicodeEncodeError Unicode编码错误,一般是unicode->str错误
UnicodeDecodeError Unicode解码错误,一般是str->unicode错误
ValueError 值错误,比如传一个12a给int()函数转换
ZeroDivisionError 除0错误
IOError 打开一个不存在的文件(在Python3中使用FileNotFoundError)
FileNotFoundError 文件没有找到的错误