Python3 常见错误和异常处理

2020-04-23 13:52:56 浏览数 (1)

Python3常见错误

异常名称

描述

解决方法

BaseException

所有异常的父类

Python所有的错误都是从BaseException类派生的,是所有异常的父类

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

用户按下Ctrl-C(或者Delete)终止一个正在运行的程序时,会产生,重新运行即可

Exception

常规错误的基类

StopIteration

迭代器没有更多的值

GeneratorExit

生成器(generator)发生异常来通知退出

StandardError

所有的内建标准异常的基类

ArithmeticError

所有数值计算错误的基类

FloatingPointError

浮点计算错误

这个错误由导致错误的浮点操作产生,前提是已经打开了浮点异常控制(fpectl),启用fpectl时,要求编译解释器提供 with-fpectl标志,但是标准文档中不提倡使用fpectl

OverflowError

数值运算超出最大限制

当一个算术运算超出变量类型的界限时,会产生

ZeroDivisionError

除(或取模)零 (所有数据类型)

0做分母时抛出

AssertionError

断言语句失败

AttributeError

对象没有这个属性

当一个属性引用或赋值失败时,会产生

EOFError

没有内建输入,到达EOF 标记

对于类似input或者raw_input这样的内置函数,如果在遇到输入流末尾之前没有读到任何数据,会产生

EnvironmentError

操作系统错误的基类

IOError

输入/输出操作失败

如磁盘满了,输入文件不存在等等

OSError

操作系统错误

一个操作系统级别函数返回错误时会产生OSError

WindowsError

系统调用失败

ImportError

导入模块/对象失败

无法导入一个模块或者模块中的一个成员时会产生该异常

LookupError

无效数据查询的基类

IndexError

序列中没有此索引(index)

如果索引超出范围,就会产生IndexError

KeyError

映射中没有这个键

如果没有找到一个值作为字典的键,会产生异常

MemoryError

内存溢出错误(对于Python 解释器不是致命的)

如果一个程序用尽了所有内存,而且可以恢复,会产生

NameError

未声明/初始化对象 (没有属性)

如果代码引用了一个名字,而当前作用域中不存在这个名字,会产生

UnboundLocalError

访问未初始化的本地变量

一种NameError,特别针对局部变量名

ReferenceError

弱引用(Weak reference)试图访问已经垃圾回收了的对象

使用一个weakref代理访问已经被垃圾回收的对象时,会产生

RuntimeError

一般的运行时错误

如果没有其他更特定的异常可用,就要使用RuntimeError异常

NotImplementedError

尚未实现的方法

用户自定义的基类可能产生NotImplementedError,来指示一个方法或者行为需要子类定义

SyntaxError Python

语法错误

查看报错信息在第几行 ,从这一行往上找错误

IndentationError

缩进错误

语法格式问题 需要缩进

TabError Tab

和空格混用

SystemError

一般的解释器系统错误

如果错误发生在解释器本身,会产生

TypeError

对类型无效的操作

使用 拼接的时候 必须使用字符串,或者将数字转化成字符串

ValueError

传入无效的参数

如果一个函数接收到的值类型正确,但是值不合法时产生

UnicodeError

Unicode 相关的错误

ValueError的一个子类,出现Unicode问题时产生

UnicodeDecodeError

Unicode 解码时的错误

UnicodeEncodeError

Unicode 编码时错误

UnicodeTranslateError

Unicode 转换时错误

Warning

警告的基类

DeprecationWarning

关于被弃用的特征的警告

FutureWarning

关于构造将来语义会有改变的警告

OverflowWarning

旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning

关于特性将会被废弃的警告

RuntimeWarning

可疑的运行时行为(runtime behavior)的警告

SyntaxWarning

可疑的语法的警告

UserWarning

用户代码生成的警告

Python3异常处理

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行检测到的错误被称为异常。

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法:

try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附加的数据 else: <语句> #如果没有异常发生

以下为简单的try....except...else的语法:

代码语言:javascript复制
try:
    int("aaa")  #可能出现异常的代码
except IndexError as e:      # 捕捉索引异常的子异常,注意,这里的as e在老版本的py中可以写成,e但是新版本中用as e,",e"未来可能会淘汰
    print("IndexError:",e)
except ValueError as e:      # 捕捉value错误的子异常
    print("ValueError:",e)
except Exception as e:      # 如果上面两个异常没有捕获到,那么使用Exception捕获,Exception能够捕获所有的异常
    print("Exception:",e)
else:      # else 子句将在 try 子句没有发生任何异常的时候执行
    print("true")
finally:      # 不管是否发生异常,在最后都会执行finally中的代码,假如try里面的代码正常执行,先执行else中的代码,再执行finally中的代码
    print("finally")

#输出:
ValueError: invalid literal for int() with base 10: 'aaa'
finally
抛出异常

Python 使用 raise 语句抛出一个指定的异常。

raise语法格式如下:

代码语言:javascript复制
raise [Exception [, args [, traceback]]]

当我们注册某个账号时,经常会被提示,密码少于多少位,请重新输入:

代码语言:javascript复制
x = len(password)
if x < 6:
    raise Exception('密码不能小于 6个字符,请重新输入')

#输出:
Traceback (most recent call last):
  File "test.py", line 3, in <module>
  raise Exception('密码不能小于 6个字符,请重新输入')
Exception: 密码不能小于 6个字符,请重新输入

0 人点赞