Python基础-异常处理
一、程序开发中为什么需要异常处理:
有些时候我们的程序在运行过程中可能会有意想不到的事情发生,这种情况就叫做异常,异常如果不处理好,可能直接导致我们的程序退出崩溃。因此我们要对异常进行处理,来确保我们的程序能够稳健的运行。
二、异常处理的语法:
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:
print('这个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)
上例中也用到了as
关键字,将捕获到的错误赋值给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)
七、自定义异常:
自定义异常需要继承自Exception
类:
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 | 文件没有找到的错误 |
更多请参考: | https://docs.python.org/3/library/exceptions.html#concrete-exceptions |