文章目录

  • 1. 简介
  • 2. 安装以及使用过程
  • 3. 测试对比
  • 4. pretty_errors 的个性化使用
  • 5. Python 异常类型样例
    • 5.1 Python 有哪些异常类型
    • 5.2 部分异常类型介绍[^1]
      • SystemExit
      • KeyboardInterrupt
      • StopIteration
      • OverflowError
      • ZeroDivisionError
      • AssertionError
      • AttributeError
      • BufferError
      • EOFError
      • ImportError
      • ModuleNotFoundError
      • IndexError
      • KeyError
      • MemoryError
      • NameError
      • UnboundLocalError
      • BlockingIOError
      • ChildProcessError
      • FileExistsError
      • FileNotFoundError
      • InterruptedError
      • IsADirectoryError
      • NotADirectoryError
      • PermissionError
      • ProcessLookupError
      • TimeoutError
      • RuntimeError
      • RecursionError
      • SyntaxError
      • IndentationError
      • TabError
      • SystemError
      • TypeError
      • ValueError

1. 简介

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

简单来说,如下图所示,它可以将繁杂冗长的错误输出凝练出核心信息给您,让您立马就知道错误是什么,在哪里。

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_FULLline_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 模块探索 —— pretty_errors相关推荐

  1. import pymysql 没有模块_小白详细的 python 模块的运用

    小白详细的 python 模块的运用 什么是模块 用书里的话说:模块是最高级别的程序组织单元.这句话的意思是,模块什么都能封装,就像这样: 在模块中,我们不但可以直接存放变量,还能存放函数,还能存放类 ...

  2. 系统学习Python——模块和包:Python程序架构

    实际上,程序通常涉及不只一个文件.除了最简单的脚本之外,程序一般将采用多文件系统的形式,即使能够自己编写单个文件,也一定会使用到其他人已经写好的外部文件. Python程序架构是将一个程序分割为源代码 ...

  3. GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态

    GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态 一个Python模块,用于在Python中使用nvidia-smi以编程方式从NVIDA GPU获取GP ...

  4. 在Ubuntu 14.04.5 LTS上安装python模块selenium 3实录

    简介 Selenium是python模块库中一组web自动化测试工具集,提供多种语言的API,例如java,python,ruby,.net等,支持Firefox,Chrome,IE,Safari 等 ...

  5. Python模块MySQLdb操作mysql出现2019错误:Can't initialize character set utf-8

    我使用python的MySQLdb模块实现了一个mysql client, 在测试时,出现了如下错误 Python模块MySQLdb操作mysql出现2019错误:Can't initialize c ...

  6. Python培训教程分享:Python模块如何导入__all__属性?

    本期小编为大家带来的Python培训教程是关于"Python模块如何导入__all__属性?"的内容,后面在工作中是会遇到Python模块这个工作内容的,Python模块的开头通常 ...

  7. 分享3个好用到爆的 Python 模块,点赞收藏

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天给大家介绍3个特别好用的Python模块,知道的人可能不多,但是特别的好用. Psutil Pendulum Pyfiglet Psutil Pyt ...

  8. python模块之image修改图片类型

    python模块之image修改图片类型 有时候我们需要不同格式的图片后缀格式,如:png,jpg,如果仅仅手动修改图片的后缀的话,只是表面修改了后缀格式,其实图片的原类型仍然没有变化,可以用pyth ...

  9. python模块之imghdr检测图片类型

    python模块之imghdr检测图片类型 1. imghdr是什么 imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流.[仅仅根据文件后缀判断文件类型显然不准 ...

最新文章

  1. sql 一对多获得一条数据_从真实销售数据获得insights——SQL部分
  2. Eclipse的设置、调优、使用(解决启动卡顿等问题)----转
  3. 编程之美2.5 寻找最大的K个数
  4. java 肌汉模式_设计模式之原型模式详解(附源代码)
  5. arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」
  6. 查看swintransformer的网络结构
  7. 设计模式:讲在设计模式之前
  8. Oacle 开窗函数 分析函数
  9. 【福利解锁Part1】报名参与腾讯云专场活动,第一波干货内容免费放送
  10. Node中的fs模块
  11. 多个tomcat部署的端口问题
  12. Java swing 代码例子
  13. 无心剑中译切尼《当代的悖论》
  14. magento 安装出错 完全解决方案
  15. 彻底理解数字图像处理中的卷积-以Sobel算子为例
  16. hdu5745 La Vie en rose(暴力)
  17. 雪花飘落代码java_JavaScript实现雪花飘落效果
  18. SQL SERVER 经典语句大全必学(3)——技巧篇
  19. java邮箱发送验证码_java实现使用QQ邮箱发送验证码功能
  20. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速【转】

热门文章

  1. Java可变类型与不可变类型
  2. Permission Denial: opening provider com.ang.providertest.BookProvider from ProcessRecord
  3. 谨以此文提醒一下自己这几天又犯怠惰的毛病了,还要继续加油
  4. 【攻防世界】REVERSE新手练习区 - Hollo,CTF
  5. 程序员如何持续高收入、财务自由
  6. 用传统流程图表示求解以下问题的算法有两个瓶子A和B
  7. 关于手机的三大谣传 千万不可信
  8. 飞思卡尔K22调试FXOS8700加速度和电子罗盘(2)
  9. ca76a_c++_流文件打开输入输出文件模式
  10. 用 Python 解释 SpaceX 如何进行火箭回收