我在写一个小(ER)的Python脚本来自动半频繁,长,且容易出错的任务的过程。这个脚本是负责制定各种系统调用 - 无论是虽然使用os.system或通过操作系统。(MKDIR | CHDIR |等)。如何优雅地捕捉错误并保持方法的清洁?
这里是我的代码示例现在:
class AClass:
def __init__(self, foo, bar, verbose=False, silent=False):
# Sets up variables needed for each instance, etc
self.redirect = ''
if silent:
self.redirect = '> 2>&1'
self.verbose = verbose
def a_method(self):
""" Responsible for running 4-6 things via system calls as described """
if self.verbose and not self.silent:
print "Creating a directory"
try:
os.mkdir('foobar')
except OSError, e:
raise OSError, "Problem creating directory %s: %s" % (e.filename, e.strerror)
if self.verbose and not self.silent:
print "Listing a directory"
if (os.system('ls foobar %s') % self.redirect) is not 0:
raise OSError, "Could not list directory foobar"
def b_method(self):
""" Looks very similar to a_method() """
def run(self):
""" Stitches everything together """
try:
a_method()
except OSError, e:
print "a_method(): %s" % e.strerror
sys.exit(-1)
try:
b_method()
except OSError, e:
print "b_method(): %s" % e.strerror
sys.exit(-1)
显然编写所有if self.verbose and not self.silent
凌乱,然后围绕每个呼叫的try/catch
或if
是丑陋来看待。 我也喜欢使用Python的日志类,只是有一个日志记录级别(详细)通过命令行配置,然后我可以简单的调用logger.debug('My message')
但我使用Python 2.2和我没有访问logging
类。
摘要/基本问题
我正在使用Python 2.2,我无法更改此设置。我在ESX 3.0.2服务器上运行,暂时无法以其他方式触摸它。
什么是处理错误检查和详细输出没有这个逻辑绑到类(这应该只做一件事)的最好方法?
我怎样才能减少更多的东西简单或优雅看混乱?
谢谢!
DRY原则:不要重复自己。 – 2009-08-12 04:13:37