Tuesday 31 October 2017

What is the EAFP principle in Python?

I'll try to explain it with another
example.




Here we're trying to access
the file and print the contents in console.



LBYL - Look Before You Leap
:



We might want to check if we can access the
file and if we can, we'll open it and print the contents. If we can't access the file
we'll hit the else part. The reason that this is a race
condition is because we first make an access-check. By the time we reach
with open(my_file) as f: maybe we can't access it anymore due
to some permission issues (for example another process gains an exclusive file lock).
This code will likely throw an error and we won't be able to catch that error because we
thought that we could access the
file.



import
os

my_file =
"/path/to/my/file.txt"


# Race condition
if
os.access(my_file, os.R_OK):
with open(my_file) as f:

print(f.read())
else:
print("File can't be
accessed")


EAFP -
Easier to Ask for Forgiveness than Permission
:




In this example, we're just trying
to open the file and if we can't open it, it'll throw an
IOError. If we can, we'll open the file and print the contents.
So instead of asking something we're trying to
do it. If it works, great! If it doesn't we catch the error and handle
it.



# # No race
condition
try:
f = open(my_file)
except IOError as
e:
print("File can't be accessed")
else:
with
f:


print(f.read())

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...