我注意到我在过去写了很多类似下面的 try-except 子句。这样做的主要原因是编写更少的代码。
class Synchronizer(object):
# ...
def _assert_dir(self, dirname, argname, argnum):
""" *Private*. Raises OSError if the passed string does not point
to an existing directory on the file-system. """
if not os.path.isdir(dirname):
message = 'passed `%s` argument (%d) does not point to a ' \
'directory on the file-system.'
raise OSError(message % (argname, argnum))
def synchronize(self, source_dir, dest_dir, database):
# Ensure the passed directories do exist.
try:
self._assert_dir(source_dir, 'source_dir', 2)
self._assert_dir(dest_dir, 'dest_dir', 3)
except OSError:
raise
# ...
我是这样做的,否则我需要写
class Synchronizer(object):
# ...
def synchronize(self, source_dir, dest_dir, database):
# Ensure the passed directories do exist.
if not os.path.isdir(source_dir):
message = 'passed `source_dir` argument (2) does not point to a ' \
'directory on the file-system.'
raise OSError(message)
if not os.path.isdir(dest_dir):
message = 'passed `dest_dir` argument (3) does not point to a ' \
'directory on the file-system.'
raise OSError(message)
# ...
我实际上喜欢编写方法进行检查和提升操作的想法,但我看到了一个很大的缺点:可读性。特别是对于进行代码折叠的编辑器,该try
语句并不能很好地告诉读者其中发生了什么,而是if not os.path.isdir(source_dir)
一个很好的提示。
恕我直言,try-except 子句是必需的,因为它会混淆异常来自的异常捕获器(回溯的读取器)。
你觉得这个设计怎么样?它对你来说是可怕的、伟大的还是令人困惑的?或者您对如何改善这种情况有任何想法?