报错类型
- AssertError 断言语句(assert)失败
- AttributeError 尝试访问未知的对象属性
- EOFError 用户输入文件末尾标志EOF(Ctrl+d)
- FloatingPointError 浮点计算错误
- GeneratorExit generator.close()方法被调用的时候
- ImportError 导入模块失败的时候
- IndexError 索引超出序列的范围
- KeyError 字典中查找一个不存在的关键字
- KeyboardInterrupt 用户输入中断键(Ctrl+c)
- MemoryError 内存溢出(可通过删除对象释放内存)
- NameError 尝试访问一个不存在的变量
- NotImplementedError 尚未实现的方法
- OSError 操作系统产生的异常(例如打开一个不存在的文件)
- OverflowError 数值运算超出最大限制
- ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
- RuntimeError 一般的运行时错误
- StopIteration 迭代器没有更多的值
- SyntaxError Python的语法错误
- IndentationError 缩进错误
- TabError Tab和空格混合使用
- SystemError Python编译器系统错误
- SystemExit Python编译器进程被关闭
- TypeError 不同类型间的无效操作
- UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
- UnicodeError Unicode相关的错误(ValueError的子类)
- UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
- UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
- UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
- ValueError 传入无效的参数
- ZeroDivisionError 除数为零
Python的异常处理模块语法:
try:
pass #一段可能出现错误的代码
except error1:
pass #出现error1的异常处理代码
except error2:
pass #出现error2的异常处理代码
except (error3, error4, error5):
pass #出现error3,error4,error5的异常处理代码
except:
pass #出现所有异常的处理代码
else:
pass #没出现异常,将执行此代码
finally:
pass #无论有没有异常,都将执行此代码
try:
#raise NameError #raise + 异常类型 可以手动引发一个相应类型的异常
a = int(input("请输入一个数字:"))
b = 100/a
print("100除以{}的结果为{}".format(a, b))
except ValueError as e:
print("只能输入数字")
print(e)
except ZeroDivisionError as e:
print("除数不能为0")
print(e)
except (NameError, SyntaxError):
print("变量用错 或 语法有错误")
except Exception as e: #Exception是所有报警类的父类,所以它能够接住一切报警,要把它写到最后except里
print("就是出错了,出了什么错我也不知道了")
else:
print("哈哈没有错误,我被执行了")
finally:
print("出没出错我都执行了")
自定义报警
- 相当于自定义一个类,此类的父类必须是上面报警中的一个类或者"Exception"
- class 异常名称(父类名):
- 发生异常的异常代码
- 发生异常后的问题提示
- 发生异常的行数(位置)