IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 模块探索 —— pretty_errors -> 正文阅读

[Python知识库]Python 模块探索 —— pretty_errors

1. 简介

大家好,我是 Jia ming,今天为大家带来一个超简单的 Python 模块 —— pretty_errors1。它的作用是什么呢?美化 Python 异常输出以使其清晰可读

简单来说,如下图所示,它可以将繁杂冗长的错误输出凝练出核心信息给您,让您立马就知道错误是什么,在哪里。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f017fy0F-1629636770477)(https://warehouse-camo.ingress.cmh1.psfhosted.org/1f80276b18f985e2ed32ab85cbeac3ea6587ee98/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6f6e656c697665736c6566742f5072657474794572726f72732f6d61737465722f6578616d706c652e706e67#pic_center)]

2. 安装以及使用过程

正如其它模块一样,该模块的安装过程十分简单:python -m pip install pretty_errors

使用过程也是十分简单,只需要 import 该模块即可,如下所示:

测试代码:

import pretty_errors
print(1/0)

报错信息:

tmp.py 2 <module>
print(1/0)

ZeroDivisionError:
division by zero

3. 测试对比

当不使用 pretty_errors 模块时,会得到如下结果。

测试代码:

print(1/0)

报错信息:

PS D:\Python_Project> & D:/Python35/python.exe d:/Python_Project/tmp.py
Traceback (most recent call last):
  File "d:/Python_Project/tmp.py", line 1, in <module>
    print(1/0)
ZeroDivisionError: division by zero

两厢对比,该模块确实能够带来不少美化效果,值得一用。

4. pretty_errors 的个性化使用

重点介绍 pretty_errors.configure 语句的作用,先看如下样例:

测试代码,建议结合之后的报错截图食用:

import pretty_errors
pretty_errors.configure(
    separator_character = '*', # 用于创建标题行的字符,如果设置为None或者''则标题被禁用,之后的报错信息截图中可以理解该设置的意义。
    filename_display    = pretty_errors.FILENAME_EXTENDED, # 如何显示文件名,可以是pretty_errors.FILENAME_COMPACT、pretty_errors.FILENAME_EXTENDED、pretty_errors.FILENAME_FULL
    line_number_first   = True, # 启用后,将首先显示行号,而不是文件名,二者会交换位置
    display_link        = True, # 启用后,错误下方会写入一个链接,VSCode允许您单击该链接。
    lines_before        = 5, # 显示发生异常的语句之前5行代码
    lines_after         = 2, # 显示发生异常的语句之后2行代码
    line_color          = pretty_errors.RED + '> ' + pretty_errors.default_config.line_color, # 转移序列设置导致异常的代码行的颜色
    code_color          = '  ' + pretty_errors.default_config.line_color, # 用于设置导致异常的代码行的颜色。
    truncate_code       = True, # 启用后,每行代码都将被截断显示
    display_locals      = True # 启用后,出现在顶部堆栈帧代码中的局部变量将与其值一起显示。
)
def func():
    print(1/0)
func()
# 1. NameError
# Print("Hello") # NameError: name 'Print' is not defined

关于 pretty_errors.configure 语句的更多信息可以参考 pretty-errors 官方文档

报错信息如下:

在这里插入图片描述

5. Python 异常类型样例

为什么要挑这个模块来讲述,这就要引出本文的重点了,那就是 Python 异常类型的总结。我觉得有必要总结一下,让初学者能够有所认识,以至于看到报错信息后能够了然于胸。

5.1 Python 有哪些异常类型

参考 Python 标准库关于内置异常的官方文档中的介绍,Python 的异常层次结构2

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

5.2 部分异常类型介绍2

SystemExit

此异常由 sys.exit() 函数引发。它继承自 BaseException 而不是 Exception 以确保不会被处理 Exception 的代码意外捕获。如果该值为一个整数,则它指明系统退出状态码(会传递给 C 的 exit() 函数);如果该值为 None,则退出状态码为零。

KeyboardInterrupt

当用户按下中断键(通常为 Control-C 或 Delete)时将被引发。在执行期间,会定期检测中断信号。

StopIteration

迭代器不能产生下一项。

OverflowError

算数运算的结果大到无法表示时引发,对整数来说不可能发生(而是 MemoryError),出于历史原因,有时整数超过要求范围会引发该错误。

ZeroDivisionError

当除法或取余运算的第二个参数为零时被引发。
print(1/0) # ZeroDivisionError: division by zero

AssertionError

assert 语句失败时被引发。

AttributeError

当属性引用或赋值失败时被触发,但是当一个对象根本不支持属性引用或赋值时将引发 TypeError

BufferError

与缓冲区相关的操作无法执行时被触发。

EOFError

input() 函数未读取到任何数据便到达文件结束文件 EOF 时被触发。

ImportError

import 语句尝试加载模块遇到麻烦时被触发。

ModuleNotFoundError

当一个模块无法被定位时将被触发。

IndexError

当序列索引超出范围时被触发。

KeyError

键值对不存在。

MemoryError

某个操作耗尽了内存。

NameError

当某个局部或全局名称未找到时被引发。
Print("Hello") # NameError: name 'Print' is not defined

UnboundLocalError

当在函数或方法中对某个局部变量进行引用,但该变量并未绑定任何值时被触发。

BlockingIOError

当一个操作会被某个设置为非阻塞操作的对象(例如套接字)所阻塞时将被引发。

ChildProcessError

当一个子进程上的操作失败时将被引发。

FileExistsError

试图创建一个已存在的文件或目录时被触发。

FileNotFoundError

所请求的文件或目录不存在。

InterruptedError

当系统调用被输入中断信号时触发。

IsADirectoryError

请求对一个目录执行文件操作(os.remove())。

NotADirectoryError

在非目录上请求目录操作(os.listdir())。

PermissionError

没有足够权限时试图进行某个操作。

ProcessLookupError

给定进程不存在时被引发。

TimeoutError

一个系统函数发生系统级超时的情况下被引发。

RuntimeError

当检测到一个不归属于任何其他类别的错误时将被引发。

RecursionError

检测到超过最大递归深度。

SyntaxError

解释器遇到语法错误。

IndentationError

不正确的缩进相关的语法错误。

TabError

缩进包含对制表符和空格符不一致的使用时被引发。

SystemError

解释器内部错误。

TypeError

当一个操作或函数被应用于类型不适当的对象时将被引发。

print('s' + 1) # TypeError: Can't convert 'int' object to str implicitly

ValueError

当操作或函数接收到具有正确类型但值不适合的参数。


  1. pretty-errors ??

  2. Documentation Python 3.9.6 —— 内置异常 ?? ??

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:38:21  更:2021-08-23 16:39:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:20:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码