pos*_*ist 22 python linux symlink
如果我打电话os.stat()
给一个破碎的symlink
,python会抛出OSError
异常.这使它有助于找到它们.但是,还有一些其他原因os.stat()
可能引发类似的异常.symlinks
在Linux下有没有更精确的方法来检测Python 损坏?
Tho*_*ele 25
一个常见的Python谚语是,请求宽恕比允许更容易.虽然我不喜欢现实生活中的这种说法,但它确实适用于很多情况.通常,您希望避免在同一文件上链接两个系统调用的代码,因为您永远不知道代码中两次调用之间文件会发生什么.
一个典型的错误是写下这样的东西:
if os.path.exists(path):
os.unlink(path)
Run Code Online (Sandbox Code Playgroud)
第二个调用(os.unlink)可能会失败,如果在if测试之后删除了其他内容,则引发异常,并停止执行其余的函数.(你可能会认为这在现实生活中不会发生,但我们上周刚从我们的代码库中捕获了另一个错误 - 这种错误让一些程序员摸不着头脑并声称'Heisenbug'最近几个月)
所以,在你的特殊情况下,我可能会这样做:
try:
os.stat(path)
except OSError, e:
if e.errno == errno.ENOENT:
print 'path %s does not exist or is a broken symlink' % path
else:
raise e
Run Code Online (Sandbox Code Playgroud)
这里的烦恼是stat为符号链接返回相同的错误代码,该符号链接不在那里且符号链接损坏.
所以,我猜你别无选择,只能破坏原子性,并做类似的事情
if not os.path.exists(os.readlink(path)):
print 'path %s is a broken symlink' % path
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18668 次 |
最近记录: |