不错的python异常钩子替换

better_exchook的Python项目详细描述


一个更好的python sys.excepthook替代品, 也就是说,它用扩展信息打印堆栈跟踪。 它将为每个帧添加一些有用的信息, 类似于打印相关变量(relevant=在代码行中引用)。 有关详细信息,请参见Python source and comments

功能

  • 堆栈跟踪输出中的多行python语句。
  • 每帧的彩色/格式化输出。
  • python源代码的语法突出显示。
  • 支持DomTerm, 默认情况下,它会折叠每个堆栈帧的所有细节, 从而提供了更全面的概述, 同时在需要的时候提供所有的细节。

安装

您只需将单个文件better_exchook.py复制到您的项目。

或者,也可以使用on PyPI 可通过以下方式安装:

pip install better_exchook

用法

importbetter_exchookbetter_exchook.install()# will just do: sys.excepthook = better_exchook

示例

python示例代码:

try:x={1:2,"a":"b"}deff():y="foo"x,42,sys.stdin.__class__,sys.exc_info,y,zf()exceptException:better_exchook.better_exchook(*sys.exc_info())

输出:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 478, in <module>
    line: f()
    locals:
      f = <local> <function f at 0x107f1de60>
  File "better_exchook.py", line 477, in f
    line: x, 42, sys.stdin.__class__, sys.exc_info, y, z
    locals:
      x = <global> {'a': 'b', 1: 2}
      sys = <global> <module 'sys' (built-in)>
      sys.stdin = <global> <open file '<stdin>', mode 'r' at 0x107d9f0c0>
      sys.stdin.__class__ = <global> <type 'file'>
      sys.exc_info = <global> <built-in function exc_info>
      y = <local> 'foo'
      z = <not found>
NameError: global name 'z' is not defined

python示例代码:

try:f=lambdax:Nonef(x,y)exceptException:better_exchook.better_exchook(*sys.exc_info())

输出:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 484, in <module>
    line: f(x, y)
    locals:
      f = <local> <function <lambda> at 0x107f1df50>
      x = <local> {'a': 'b', 1: 2}
      y = <not found>
NameError: name 'y' is not defined

python示例代码:

try:(lambdax:None)(__name__,42)# multilineexceptException:better_exchook.better_exchook(*sys.exc_info())

输出:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 490, in <module>
    line: (lambda x: None)(__name__,
                           42)  # multiline
    locals:
      x = <local> {'a': 'b', 1: 2}
      __name__ = <local> '__main__', len = 8
TypeError: <lambda>() takes exactly 1 argument (2 given)

python示例代码:

# use this to overwrite the global exception handlersys.excepthook=better_exchook.better_exchook# and failfinalfail(sys)

输出:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 497, in <module>
    line: finalfail(sys)
    locals:
      finalfail = <not found>
      sys = <local> <module 'sys' (built-in)>
NameError: name 'finalfail' is not defined

屏幕截图:

https://gist.githubusercontent.com/albertz/a4ce78e5ccd037041638777f10b10327/raw/7ec2bb7079dbd56119d498f20905404cb2d812c0/screenshot1.png

带有DomTerm

https://gist.githubusercontent.com/albertz/a4ce78e5ccd037041638777f10b10327/raw/7ec2bb7079dbd56119d498f20905404cb2d812c0/screencast-domterm.gif

类似项目

–阿尔伯特·泽耶,<;http://www.az2000.de>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Hibernate:合并并删除,而不是从数据库中删除实体对象   java如何在WebFilter中有条件地从Mono返回?   java调用mysql c3p0函数   可执行jar Java jar文件加载错误:无法找到或加载主类。类导致的错误:java。lang.ClassNotFoundException:某些东西。班   java如何减少/更改爬网后的延迟?   从其他语言(如Java、PHP、Perl、Python等)调用C/C++代码的最佳方式是什么?   java如何模拟影响对象的void返回方法   当我试图在ubuntu上启动JavaScala时,它抛出了一个异常   java如何正确输出游戏   理解java和C++背景下的JavaScript原型   oracle如何将Java函数转换为postgresql函数   多线程为什么我的java服务器程序在超时后不退出?   java如何使listView中的按钮在单击时工作?   试图将这个嵌套的java forloop转换为python,但我不知道如何转换。有没有一种方法可以像这样为循环执行if语句?   java幂函数在计算器中的应用   如何在java中滚动浏览mysql数据库   在Spring Boot应用程序的JUnit测试中,java没有符合自动连线JPA存储库要求的bean   java如何使用扩展类的JPanel对象?