Pythonic way of write if open is successful
如果打开文件成功,我正在寻找创建和写入文件的方法,否则返回错误(例如,权限被拒绝)。
我在这里读到,条件变量初始化的方法是什么?。尽管我不确定此方法是否如我尝试的那样有效。
1 | os.write(fd,String) if (fd = os.open(str("/var/www/file.js"),os.O_RDWR)) else return HttpResponse("error on write") |
它应该是一条单行线。
当我执行上述操作时,会出现语法错误,例如:
1 2 3 | 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 ` |
号
是否有更多和正确的一行或两行肾盂线能够做到这一点?
我会这样做:
1 2 3 4 5 | 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和with语句(如果内部代码引发了ioerror,则会丢失ioerror)。它会导致少一个嵌套,并确保ioerror是由于打开而发生的。这样,您就没有机会捕获不需要的异常,并且您有更多的控制权。
1 2 3 4 5 6 7 8 9 | 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,在设计你的代码时,一定要追求可读性。老实说,在
aka,eafp->请求宽恕比请求允许更容易。
此外,当您写入文件时,最好使用上下文管理器。
因此,这可以很容易地转化为如下内容:
1 2 3 4 5 | try: with open('your_file', 'w') as f: f.write(your_data) except (OSError, IOError) as exc: print("Your file could not be written to, your exception details are: {}".format(exc)) |
。
既然你在问Python做什么,我认为你应该考虑请求宽恕,而不是许可的模式。也就是说,只需执行该操作,如果不起作用,则捕获适当的异常。
例如,
1 2 3 4 5 6 7 | 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' |
号
如果没有许可,将抛出一个
1 2 3 4 | try: open('/usr/tmp.txt', 'w').write('hello') except IOError: ... |
AlexMartelli曾经谈到过这个问题,并描述了一些关于检查权限的固有谬误。在这些问题上有一个固有的种族。打开文件时,您始终可以拥有写入权限,但在以后尝试写入时,您不能这样做。无论如何,您必须处理异常,所以您最好使用它们进行构建。