我正在尝试使用 python-daemon 模块。它提供 daemon.DaemonContext 类来正确地守护脚本。虽然我主要针对 Python 2.6+,但我想保持对 2.4 版的向后兼容性。
Python 2.5 支持从future导入上下文,但 Python 2.4 没有这样的功能。我想我可以捕获 with 语句引发的任何错误并手动进入和退出 2.4 的上下文,但我似乎无法捕获引发的 SyntaxError。
除了显式检查解释器版本之外,有什么方法可以实现这一点吗?以下是我正在尝试做的事情的要点以及我遇到的问题。在现实生活中,我无法控制上下文类,因此它需要在不破坏原始类的情况下工作,即不喜欢这些想法。
没关系,如果 Python 2.4 不能运行 python-daemon;我至少希望能够捕捉到错误并实施回退或其他东西。
感谢您的帮助。
#!/usr/bin/python2.4
from __future__ import with_statement
# with_statement isn't in __future__ in 2.4.
# In interactive mode this raises a SyntaxError.
# During normal execution it doesn't, but I wouldn't be able to catch it
# anyways because __future__ imports must be at the beginning of the file, so
# that point is moot.
class contextable(object):
def __enter__(self):
print('Entering context.')
return None
def __exit__(self, exc_type, exc_val, exc_tb):
print('Exiting context.')
return False
def spam():
print('Within context.')
context = contextable()
try:
with context: # This raises an uncatchable SyntaxError.
spam()
except SyntaxError, e: # This is how I would like to work around it.
context.__enter__()
try:
spam()
finally:
context.__exit__(None, None, None)