程序报错?太常见了,我们可以想办法修理好它
捕获异常
number="hello"
try:
#有可能出错的语句
number=int(number)
except Exception:
print("出错了")
else:
print("没错的时候运行")
except后面指定了报错的异常类,在python中重要的内建异常类有:
- Exception 常规错误的基类
- AttributeError 对象没有这个属性
- IOError 输入/输出操作失败
- IndexError 序列中没有此索引(index)
- KeyError 映射中没有这个键
- NameError 未声明/初始化对象 (没有属性)
- SyntaxError Python 语法错误
- SystemError 一般的解释器系统错误
- ValueError 传入无效的参数
…
除了上述列出来的,其实python的异常类还有很多,当在except后面指定异常类之后,那么只有报这个类型异常的时候才会输出“出错了”
当然我们也可以去掉Exception,这样任何异常都可以捕获到
捕获多个异常如何做
#指定多个异常
number="hello"
try:
#有可能出错的语句
number=int(number)
except ValueError:
print("ValueError出错了")
except Exception:
print("Exception出错了")
else:
print("没错的时候执行的语句")
finally:
print("无论发不发生异常,都会执行的语句")
#指定多个异常
number=[1,2,3]
try:
#有可能出错的语句
number=number[4]
except (ValueError,NameError,IndexError):
print("出错了")
else:
print("没错的时候运行")
自定义异常类
尽管python给我们提供了很多内置的异常类,但是还是不能满足精确定位的问题,我们可以通过创建一个新的exception类拥有自己的异常,异常应该继承自Exception类,可以直接继承,也可以间接继承
class MyError(Exception):
def __init__(self):
pass
def __str__(self):
return "this is error"
def Calc():
raise MyError() #通过raise语句抛出一个错误的实例
Calc()