2017-06-26 58 views
2

我有一个由用户调用的例如python script.pypython3 script.py的python脚本。如果此脚本引发错误,则使用python版本很重要。在所有错误消息中打印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)应附加到堆栈跟踪。

+1

如何在每次启动脚本时打印'sys.version'? –

+0

是什么东西? https://stackoverflow.com/questions/446052/how-can-i-check-for-python-version-in-a-program-that-uses-new-language-features –

+2

如果你使用'logging'你可以将其添加到输出格式 –

回答

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 

如果错误在你的代码提出,蟒蛇版印刷,除了正常的错误消息。

1

是的。

>>> import sys 
>>> sys.version 

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

使用try, except声明