在 Python 中,通过两个重要的功能来处理程序在运行中出现的异常和错误。其一是本文提到的异常处理,其二是断言(Assertions)。
python中,所有的异常均派生自 BaseException(所有异常的基类)类的实例,系统提供的异常类称为内置异常,它们可通过解释器或内置函数来生成。并且都会具有一个提示导致错误详细原因的“关联值”。 这可以是一个字符串或由多个信息项(例如一个错误码和一个解释错误的字符串)组成的元组。 关联值通常会作为参数被传递给异常类的构造器。
try:
可能出错的代码块
except 错误类型:
异常处理语句
除此之外,还有以下格式:
1.try...except结构 异常处理结构中最常见也最基本的结构。
2.try...except...else结构 带else子句的异常处理结构,如果没有异常则执行else语句。
3.try...except...except...结构,多个except语句,同一段代码可能会抛出多个异常。
4.try...except...finally结构,finally语句不论是否发生异常都会执行。
一般我们在 try 语句中放入可能会发生异常的代码,一旦发生异常就会跳转至 except 语句处,与相应的错误类型进行匹配。在找到对应错误类型后,执行对应语句处理异常。
a=10
b=0
try:
r=a/b
print("a/b="+r)
except Exception as e:
print("异常:除数为0")
输出:
异常:除数为0
a=10
b=0
try:
r=a//b
print(r)
except TypeError as e:
print("这是:类型错误")
except ZeroDivisionError:
print("这是:0判断")
else: # 如果不发生错误,执行
print("这是:else")
finally: # 无论是否发生错误,一定会执行
print("这是:finally")
输出:
这是:0判断
这是:finally
内置异常类可以被子类继承以定义新的异常。即我们可以从 Exception 类或它的某个子类派生出新的异常类型。
# 自定义错误类型
class Err(Exception):
def __init__(self,msg):
self.msg=msg
try:
raise Err("这是自定义错误") # 抛出异常,类似C++中的throw
except Err as e:
print(e)
输出:
这是自定义错误
以下内容一用自python3 官方开发文档 内置异常中的一部分,更多内容或是详情请参看 python 社区。 》点击这里:python 内置异常《
exception BaseException
所有内置异常的基类。 它不应该被用户自定义类直接继承 (这种情况请使用 Exception)。 如果在此类的实例上调用 str(),则会返回实例的参数表示,或者当没有参数时返回空字符串。
exception Exception
所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类。
exception ArithmeticError
此基类用于派生针对各种算术类错误而引发的内置异常: OverflowError, ZeroDivisionError, FloatingPointError。
exception BufferError
当与 缓冲区 相关的操作无法执行时将被引发。
exception LookupError
此基类用于派生当映射或序列所使用的键或索引无效时引发的异常: IndexError, KeyError。 这可以通过 codecs.lookup() 来直接引发。
exception AssertionError
当 assert 语句失败时将被引发。
exception AttributeError¶
当属性引用 (参见 属性引用) 或赋值失败时将被引发。 (当一个对象根本不支持属性引用或属性赋值时则将引发 TypeError。)
exception EOFError
当 input() 函数未读取任何数据即达到文件结束条件 (EOF) 时将被引发。 (另外,io.IOBase.read() 和 io.IOBase.readline() 方法在遇到 EOF 则将返回一个空字符串。)
exception ImportError
当 import 语句尝试加载模块遇到麻烦时将被引发。 并且当 from … import 中的 “from list” 存在无法找到的名称时也会被引发。
exception ModuleNotFoundError
ImportError 的子类,当一个模块无法被定位时将由 import 引发。 当在 sys.modules 中找到 None 时也会被引发。
exception IndexError
当序列抽取超出范围时将被引发。 (切片索引会被静默截短到允许的范围;如果指定索引不是整数则 TypeError 会被引发。)
exception KeyError
当在现有键集合中找不到指定的映射(字典)键时将被引发。
exception KeyboardInterrupt
当用户按下中断键 (通常为 Control-C 或 Delete) 时将被引发。 在执行期间,会定期检测中断信号。 该异常继承自 BaseException 以确保不会被处理 Exception 的代码意外捕获,这样可以避免退出解释器。
exception MemoryError
当一个操作耗尽内存但情况仍可(通过删除一些对象)进行挽救时将被引发。 关联的值是一个字符串,指明是哪种(内部)操作耗尽了内存。 请注意由于底层的内存管理架构(C 的 malloc() 函数),解释器也许并不总是能够从这种情况下完全恢复;但它毕竟可以引发一个异常,这样就能打印出栈回溯信息,以便找出导致问题的失控程序。
exception NameError
当某个局部或全局名称未找到时将被引发。 此异常仅用于非限定名称。 关联的值是一条错误信息,其中包含未找到的名称。
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
此异常在一个系统函数返回系统相关的错误时将被引发,此类错误包括 I/O 操作失败例如 “文件未找到” 或 “磁盘已满” 等(不包括非法参数类型或其他偶然性错误)。
exception SyntaxError
当解析器遇到语法错误时将被引发。 这可以发生在 import 语句,对内置函数 exec() 或 eval() 的调用,或者读取原始脚本或标准输入(也包括交互模式)的时候。
exception IndentationError
与不正确的缩进相关的语法错误的基类。 这是 SyntaxError 的一个子类。
exception TabError¶
当缩进包含对制表符和空格符不一致的使用时将被引发。 这是 IndentationError 的一个子类。
exception TypeError¶
当一个操作或函数被应用于类型不适当的对象时将被引发。 关联的值是一个字符串,给出有关类型不匹配的详情。
exception UnicodeError¶
当发生与 Unicode 相关的编码或解码错误时将被引发。 此异常是 ValueError 的一个子类。
exception ValueError¶
当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如 IndexError 来描述时将被引发。
OS 异常
下列异常均为 OSError 的子类,它们将根据系统错误代码被引发。
exception BlockingIOError¶
当一个操作会被某个设置为非阻塞操作的对象(例如套接字)所阻塞时将被引发。 对应于 errno EAGAIN, EALREADY, EWOULDBLOCK 和 EINPROGRESS。
exception FileExistsError
当试图创建一个已存在的文件或目录时将被引发。 对应于 errno EEXIST。
exception FileNotFoundError
当所请求的文件或目录不存在时将被引发。 对应于 errno ENOENT。
exception InterruptedError
当系统调用被输入信号中断时将被引发。 对应于 errno EINTR。
exception TimeoutError
当一个系统函数发生系统级超时的情况下将被引发。 对应于 errno ETIMEDOUT
exception Warning
警告类别的基类。
exception UserWarning
用户代码所产生警告的基类。
xception SyntaxWarning
与模糊的语法相关的警告的基类。
exception RuntimeWarning
与模糊的运行时行为相关的警告的基类
以上内容只列出部分,详情请参考 python 官方文档。
附:
内置异常:https://docs.python.org/zh-cn/3/library/exceptions.html?highlight=exception#Exception
手机扫一扫
移动阅读更方便
你可能感兴趣的文章