一般来说,请求宽恕比请求许可要好——你必须在编写每个文件时处理错误,所以为什么要提前检查呢?
但是,当你有一个用户界面时——甚至是一个命令行界面,你可以在写任何东西之前很久就读取一个 prefs 文件——用户尽快返回错误通常会更方便。只要这是您进行此检查的唯一原因,它就没有任何问题。
但是,有许多小方法可以改进检查方式。
首先,您几乎不应该只使用except:
而不指定任何内容。除了在不同版本的 Python 中捕获不同的东西(因此也会混淆习惯于其他版本的人类读者)这一事实之外,这意味着您无法区分不可写、错误的 Unicode 字符,甚至是代码中的拼写错误.
另外,如果无法写入,您的错误消息会显示“不可读”,这很奇怪。
其次,除非您确定没有人会拥有一个名为的文件.mwcrawler
(例如,因为您拒绝传输以'.'
或其他开头的文件),否则使用任何固定名称都是自找麻烦。更好的解决方案是使用例如tempfile.mkdtemp
.
此外,如果您想要可移植,则应避免对路径使用字符串操作。这就是os.path
(和更高级别的实用程序)的用途——因此您不必学习或考虑 Windows、zOS 等。
把它们放在一起:
try:
d = tempfile.mkdtemp(prefix='.mwcrawler', dir=dumpdir)
except Exception as e:
logging.error('Could not open %s for reading (%s), using default', dumpdir, e)
else:
os.rmdir(d)