]> granicus.if.org Git - python/commitdiff
add example for not using access
authorBenjamin Peterson <benjamin@python.org>
Fri, 20 May 2011 16:41:13 +0000 (11:41 -0500)
committerBenjamin Peterson <benjamin@python.org>
Fri, 20 May 2011 16:41:13 +0000 (11:41 -0500)
Doc/library/os.rst

index b16fb1fa3646f6d9bd0547d6021a1c4c98b117f8..0466da448741a9a1e8024749804337fc8c12c696 100644 (file)
@@ -916,7 +916,26 @@ Files and Directories
       Using :func:`access` to check if a user is authorized to e.g. open a file
       before actually doing so using :func:`open` creates a security hole,
       because the user might exploit the short time interval between checking
-      and opening the file to manipulate it.
+      and opening the file to manipulate it. It's preferable to use :term:`EAFP`
+      techniques. For example::
+
+         if os.access("myfile", os.R_OK):
+             with open("myfile") as fp:
+                 return fp.read()
+         return "some default data"
+
+      is better written as::
+
+         try:
+             fp = open("myfile")
+         except OSError as e:
+             if e.errno == errno.EACCESS:
+                 return "some default data"
+             # Not a permission error.
+             raise
+         else:
+             with fp:
+                 return fp.read()
 
    .. note::