Python 模块探索 —— pretty_errors(python下载安装教程)

网友投稿 465 2022-08-27


Python 模块探索 —— pretty_errors(python下载安装教程)

文章目录

​​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_errors​​​​1​​。它的作用是什么呢?美化 Python 异常输出以使其清晰可读。

2. 安装以及使用过程

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

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

测试代码:

import pretty_errorsprint(1/0)

报错信息:

tmp.py 2 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.pyTraceback (most recent call last): File "d:/Python_Project/tmp.py", line 1, in print(1/0)ZeroDivisionError: division by zero

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

4. pretty_errors 的个性化使用

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

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

import pretty_errorspretty_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

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

​​pretty-errors​​​ ​​↩︎​​​​Documentation Python 3.9.6 —— 内置异常 ​​​ ​​↩︎​​ ​​↩︎​​


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用 Python 调用 .so 文件?(使用伪造变造机动车号牌怎么处罚)
下一篇:Java中的三种标准注解和四种元注解说明
相关文章

 发表评论

暂时没有评论,来抢沙发吧~