开得成功就用Python的笔法

2024-10-01 17:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种pythonic方法来创建和写入文件(如果打开成功),否则返回错误(例如,权限被拒绝)。

我在这里看书。虽然我不确定这个方法是否像我试过的那样有效。

os.write(fd,String) if (fd = os.open(str("/var/www/file.js"),os.O_RDWR)) else return HttpResponse("error on write")

应该是单程的。

执行上述操作时,会出现语法错误:

    os.write(fd,String) if (fd = os.open(str("/var/www/file.js"),os.O_RDWR)) else return HttpResponse("error on write")
                               ^
SyntaxError: invalid syntax `

是否有更多和正确的Python一行或两行能做到这一点?


Tags: 方法stringreturnifosvarwwwjs
3条回答

我会这样做:

try:
    with open('filename.ext', 'w+') as f:
        f.write("Hello world!")
except IOError as e:
    print("Couldn't open or write to file (%s)." % e)

编辑评论,谢谢您的输入!

我强烈建议使用这种语法,而不是嵌套try-and-with语句(如果内部代码引发了一个IOError,则会遗漏这个IOError)。它减少了一个嵌套,并确保IOError是由于open而发生的。这样,您就没有机会捕捉到不需要的异常,而且您有更多的控制权。

f = None
try:
    f = open('file', 'w+')
except IOError:
    print("Couldn't open the file")
else:
    f.write('You are opened')
finally:
    if f: f.close()

没有真正的Python式的方法来做它作为一个一行,这通常是一个好主意,避免长的一行。

既然你在问什么是Python在做什么,我认为你应该考虑Ask Forgiveness, Not Permission范式。也就是说,只要执行操作,如果不起作用,就捕获适当的异常。

例如

In [1]: open('/usr/tmp.txt', 'w').write('hello')
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-1-cc55d7c8e6f9> in <module>()
----> 1 open('/usr/tmp.txt', 'w').write('hello')

IOError: [Errno 13] Permission denied: '/usr/tmp.txt'

如果没有执行操作的权限,则将抛出IOError。那就抓住它。

try:
    open('/usr/tmp.txt', 'w').write('hello')
except IOError:
    ...

Alex Martelli曾经谈到过这一点,并描述了一些检查权限的固有谬误。在这些事情上有一个固有的种族。打开文件时,您可以始终拥有写入权限,但在以后尝试写入时不能。无论如何,你必须处理异常,所以你最好用它们来构建。

相关问题 更多 >

    热门问题