我有一个python脚本,由用户调用,例如python script.py
或python3 script.py
。如果此脚本引发错误,则使用python版本很重要。
当然,我可以向用户询问用于执行script.py的命令,但这可能无法解析python版本。 python
可以是python3.4
或python2.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
)应附加到堆栈跟踪。
答案 0 :(得分:1)
答案 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版本。