检查我是否可以使用Python将文件写入目录

pro*_*eek 11 python exception file-access

我需要检查是否可以将文件写入用户指向Python的目录.

有没有办法提前检查?我可能正在使用try .. catch这个目的,但我期待更好的东西,我可以提前检查.

小智 15

尽管吉姆·布里索姆(Jim Brissom)声称,如果你期望事情在几个百分点的时间内失败,那么Python中的异常处理与"检查然后尝试"成语相比并不便宜.(阅读到最后以获得异常!)但是,这里的关键是你需要检查异常,因为权限可以在检查和你的写入之间改变:

### !!! This is an example of what not to do!
### !!! Don't do this!
if os.access("test", os.W_OK):
    # And in here, some jerk does chmod 000 test
    open("test", "w").write(my_data)
    # Exception happens despite os.access!
Run Code Online (Sandbox Code Playgroud)

os.access和stat模块非常棒,如果您正在尝试,例如,准备一个文件夹列表供用户选择并希望先验地排除无效的文件夹.但是,当橡胶碰到道路时,如果您希望程序运行良好,它就不能替代异常处理.

现在异常的例外是慢速规则:异常很慢,但磁盘速度较慢.如果您的磁盘负载过重,您可能最终会将您感兴趣的文件从os.access和open call之间的操作系统或磁盘缓存中驱逐出去.在这种情况下,你将要经历一次重大的放缓,因为你必须两次去磁盘(现在,这也可能意味着网络).