我正在尝试检查给定路径下文件的可读性。这是我的代码:
def read_permissions(filepath):
'''Checks the read permissions of the specified file'''
try:
os.access(filepath, os.R_OK) # Find the permissions using os.access
except IOError:
return False
return True
这段代码可以正常运行并返回True或False作为输出结果。然而,我想让errno
的错误信息与其一起输出。我认为需要做如下修改(但我知道其中有问题):
def read_permissions(filepath):
'''Checks the read permissions of the specified file'''
try:
os.access(filepath, os.R_OK) # Find the permissions using os.access
except IOError as e:
print(os.strerror(e)) # Print the error message from errno as a string
print("File exists.")
然而,如果我输入一个不存在的文件,它会告诉我该文件存在。有人能帮我看看我做错了什么(以及我可以在将来避免这个问题的方法)吗?我没有看到任何人使用
os.access
尝试过这个。我也愿意尝试其他选项来测试文件的权限。有人能告诉我如何在出现错误时引发适当的错误消息吗?此外,这可能也适用于我的其他函数(它们仍然使用
os.access
来检查其他内容,例如使用os.F_OK
检查文件是否存在,以及使用os.W_OK
检查文件的写入权限)。以下是我试图模拟的示例:>>> read_permissions("located-in-restricted-directory.txt") # Because of a permission error (perhaps due to the directory)
[errno 13] Permission Denied
>>> read_permissions("does-not-exist.txt") # File does not exist
[errno 2] No such file or directory
我试图模拟的是通过返回适当的错误消息来解决问题。我希望这能帮助避免对我的问题产生任何困惑。
我应该指出,虽然我已经阅读了os.access
文档,但我并不是在尝试稍后打开文件。我只是试图创建一个模块,其中一些组件要检查特定文件的权限。我有一个基准(我提到的第一段代码),它为我的其余代码作出决策。在这里,我只是试图以用户友好的方式再次编写它(不仅仅是True
或False
,而是完整的消息)。由于IOError
可以通过几种不同的方式引起(例如权限被拒绝或不存在的目录),因此我正在尝试让我的模块识别和发布问题。我希望这可以帮助您帮助我确定可能的解决方案。
except
块后面的else
块中尝试使用print("File exists.")
。这是您正在寻找的行为吗? - Airreturn
而不是print
。 - Kevin Jiprint("File exists.")
放在except
块之后的else
块中。此外,mc10,我只是用return
替换了print
,似乎也没有真正做任何事情。 - Zizouz212