程序报错?太常见了,我们可以想办法修理好它

捕获异常

number="hello"
try:
    #有可能出错的语句
    number=int(number)
except Exception:
    print("出错了") 
else:
    print("没错的时候运行")   

except后面指定了报错的异常类,在python中重要的内建异常类有:

  1. Exception 常规错误的基类
  2. AttributeError 对象没有这个属性
  3. IOError 输入/输出操作失败
  4. IndexError 序列中没有此索引(index)
  5. KeyError 映射中没有这个键
  6. NameError 未声明/初始化对象 (没有属性)
  7. SyntaxError Python 语法错误
  8. SystemError 一般的解释器系统错误
  9. 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()   

离岛
588 声望79 粉丝