在所有错误消息中打印python版本

时间:2017-06-26 14:27:29

标签: python error-handling

我有一个python脚本,由用户调用,例如python script.pypython3 script.py。如果此脚本引发错误,则使用python版本很重要。

当然,我可以向用户询问用于执行script.py的命令,但这可能无法解析python版本。 python可以是python3.4python2.7的别名。

我知道我可以在脚本中打印sys.version。但我不希望在该脚本的每次运行中打印它,只是在发生错误的情况下。

另一个想法是简单地将整个脚本包装在try, except块中。

import sys
try:
    # original content of script.py
except:
    print("Using python version {0}".format(sys.version))
    raise

然而,对我来说,这看起来并不是非常pythonic。那么是否有更优雅的解决方案来为每条错误消息添加sys.version

此问题与How do I check what version of Python is running my script?不重复,因为我不想检查版本信息。我的脚本应该运行所有版本的python。但是,自定义消息(在本例中为sys.version)应附加到堆栈跟踪。

2 个答案:

答案 0 :(得分:1)

>>> import sys
>>> sys.version
  

我不想在该脚本的每次运行中打印它,只是在发生错误的情况下。

使用try, except语句

答案 1 :(得分:1)

您可以更改sys.excepthook以包含所需的行为。 只需将以下内容添加到脚本的开头:

import sys
def my_except_hook(exctype, value, traceback):
        print("Using python version {0}".format(sys.version))
        sys.__excepthook__(exctype, value, traceback)
sys.excepthook = my_except_hook

如果代码中出现错误,除了正常的错误消息外,还会打印python版本。