【问题标题】:Build shortcut for `traceback.format_exc()`为`traceback.format_exc()`构建快捷方式
【发布时间】:2020-11-27 22:18:16
【问题描述】:

所以我像这样使用traceback.format_exc()

try:
   # Some code
except:
   traceback_msg = '%s' % traceback.format_exc()
   print(traceback_msg)
   # Doing some stuff with it

经常在我的代码中将其输出到其他文件/流中,并且通过编写代码我厌倦了继续输入它。有没有一种简单的方法来定义一个全局快捷方式/ExceptionHandler,它可以保持关注并且易于从各个地方调用?

【问题讨论】:

  • 嗯,你可以在全球范围内使用tfe = traceback.format_exc,然后在任何你需要的地方使用print(tfe())
  • 你能澄清一下你的快捷方式标准是什么吗?您可以通过每个文件一次导入和每次使用一行来执行此操作(不需要字符串格式)。该模块还具有traceback.print_exc,它可以平衡print 调用。快捷方式应该比这短多少?

标签: python python-3.x shortcut


【解决方案1】:

您可以使用目录 PYTHONPATH 中的模块,该模块以缩短的名称(并且本身具有短名称)导入。

在你的设置脚本中设置环境变量PYTHONPATH 指向一个目录,例如在 .bashrc 在 Linux 中,放

export PYTHONPATH=/path/to/my_dir:$PYTHONPATH

(如果任何值已经存在,您可能需要进行测试,如果不存在,请在此处取消冒号,但这并不重要。)

同时创建/path/to/my_dir/tb.py包含

from traceback import format_exec as fe

然后你可以交互地做,例如:

>>> import tb
>>> try:
...    a = 1 / 0
... except:
...    msg = tb.fe()
...    print(">>>", msg)

给予

>>> Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero

请记住,尽管您的 tb.py 可能与您尝试使用的另一个也称为 tb.py 的模块发生冲突。也许为了安全起见不要一直设置PYTHONPATH,但是(这里又是Linux示例),在你的.bashrc中设置一个别名。

alias p='env PYTHONPATH=/path/to/my_dir:$PYTHONPATH python'

所以它只在您使用 p 别名启动 python 时设置。

还有一个环境变量PYTHONSTARTUP,您可以将其指向一个脚本,该脚本在您启动 python 时运行,尽管在本示例中没有使用。

【讨论】:

  • from traceback import format_exec as fe 和简单的fe() 在异常中没有在路径中定义python文件并且有覆盖tb.py的危险。谢谢。
  • @gies0r 是的,很明显,我只是不确定长导入语句是否是您想要避免的输入的一部分。
  • 已经在我的所有脚本中为此类事情获取了一个全局文件(将其放入),但很高兴您指出了这一点。接受。
猜你喜欢
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 2018-11-10
  • 2019-02-24
  • 1970-01-01
  • 2018-01-09
相关资源
最近更新 更多