使用上下文获取回溯。

contextualized的Python项目详细描述


如果您曾经编写过一个处理大型输入文件的python程序,那么您可能遇到了在某些文件和行上出现错误的情况。你可能会得到一个回溯,告诉你有一个KeyError,但仍然不知道文本文件中的哪一行触发了它。

然后,您可以开始添加print(line)调用,每次处理一行,但这是奇怪的,你的终端很快混乱,你将不得不最终删除它,只有在以后添加它时,下一个错误击中。

这个模块是改进这种调试问题的一个替代方案,使其干净、健壮,同时提供一个易于使用的api。

此模块的工作原理是为您提供一个上下文对象,您可以在其中设置状态变量,如文件名和行号。当引发未处理的异常时,此模块将捕获该异常并打印状态变量的值以及回溯。

示例代码:

fromcontextualizedimportcontextualized_tracebacksdefmain():dcontext.file='hello.txt'a()defa():dcontext.line=20b()defb():# buggy codenonexistent+=1withcontextualized_tracebacks(['file','line','character'])asdcontext:main()

此程序将在运行后显示此消息:

Traceback (most recent call last):
  File "contextualized_example.py", line 16, in <module>
    main()
  File "contextualized_example.py", line 5, in main
    a()
  File "contextualized_example.py", line 9, in a
    b()
  File "contextualized_example.py", line 13, in b
    nonexistent += 1
UnboundLocalError: local variable 'nonexistent' referenced before assignment
The exception was caught on file 'hello.txt', line 20.

上下文信息就在回溯之后。注意如何只显示非None字段。它们还保留来自contextualized_tracebacks()调用的顺序。

覆盖回溯打印功能

可以使用print_tb参数覆盖默认的回溯打印。例如,此示例将在跟踪之前打印上下文

fromcontextualizedimportcontextualized_tracebacksdefmain():dcontext.file='hello.txt'a()defa():dcontext.line=20b()defb():# buggy codenonexistent+=1defmy_print_tb(context,tb_info):importtracebackimportsysprint('An exception was caught on %s.'%context._to_prose(),file=sys.stderr)traceback.print_exception(*tb_info)withcontextualized_tracebacks(['file','line','character'],print_tb=my_print_tb)asdcontext:main()

这将是新输出:

An exception was caught on file 'hello.txt', line 20.
Traceback (most recent call last):
  File "contextualized_example.py", line 25, in <module>
    main()
  File "contextualized_example.py", line 5, in main
    a()
  File "contextualized_example.py", line 9, in a
    b()
  File "contextualized_example.py", line 13, in b
    nonexistent += 1
UnboundLocalError: local variable 'nonexistent' referenced before assignment

更改日志

  • 1.0:初始版本。
  • {STR 1 } $ 1.1 < /强>:StaseExchange异常不再被捕获,从而由解释器触发正常^ ^ TT6}$。
  • 1.2:修改了setup.py以使用LANG=C成功安装。
  • 1.3:修复了导致上下文化在python 2中不起作用的错误。

许可证

这个模块在麻省理工学院的许可下。

版权所有(c)2015 Juan Luis Boya García

兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的用户 在满足以下条件的情况下,可以这样做:

上述版权公告及本许可公告须包括在 软件的所有副本或大部分。

本软件按“原样”提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 适合特定目的和不侵权。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与软件、使用或其他交易有关 软件。

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

推荐PyPI第三方库


热门话题
java如何在带注释的SpringMVC中验证模型中图像的mime类型?   java无法打开Google地图活动。安卓   在另一个类文件中调用时返回空值的java getter   spring引导服务中的java线程   什么版本的Java可以使用Liquibase Maven插件?   原因:java。lang.UnsupportedOperationException:BigQuery源必须在读取之前拆分   需要java模式建议(Hibernate+Guice)   java如何在netbeans中的两个帧之间传输数据?   java在Eclipse中创建新项目,然后将其添加到Mercurial repo中   为什么打印0100用Java打印64?   java如何使用Jackson@JsonFormat注释在序列化时格式化字符串?   bash如何将java库包含到shell脚本中   java如何使我的片段利用我的活动数据?   JButton中的java波动