patternpythondjangoMinor
Creating a pythonic snippet to read and clean .csv files
Viewed 0 times
pythonicsnippetreadcreatingcsvfilesandclean
Problem
I am trying to import a .csv file, clean the contents, and make sure all the errors are eliminated.
I am using the snippet below. Could someone help me clean it and make it more pythonic?
- IO error
- file format error
- data error
I am using the snippet below. Could someone help me clean it and make it more pythonic?
try:
fl = request.FILES['csv']
except:
return HttpResponse("Some IO Error")
try:
reader = csv.reader(fl)
except:
return HttpResponse("File Not Supported")
reader.next() # this makes sure the heading is
cleaned_csv_content = list()
for row in reader:
err = 0
fname, lname, e_mail = row
try:
validate_email(email)
except:
pass
err = 1
if not err:
cleaned_csv_content.append(fname, lname, e_mail)Solution
Firstly, you should
Secondly,
Thirdly, your use of the flag
or, even better, refactor
Finally, note that
raise not return your errors.Secondly,
try: with a bare except: is bad practice (e.g. http://blog.codekills.net/2011/09/29/the-evils-of--except--/); what do you expect could go wrong with each step? Test for specific errors and deal with them appropriately. It is this which has hidden the NameError I mention at the end.Thirdly, your use of the flag
err seems a bit odd; much more Pythonic to use an actual boolean err = False or, better, else::try:
validate_email(e_mail) # see comment below
except: # but only the errors you expect - see above
pass
else:
cleaned_csv_content.append((fname, lname, e_mail)) # note additional parenthesesor, even better, refactor
validate_email to return True for a valid email and False otherwise, rather than raising errors:if validate_email(e_mail):
cleaned_csv_content.append((fname, lname, e_mail))Finally, note that
"email" != "e_mail".Code Snippets
try:
validate_email(e_mail) # see comment below
except: # but only the errors you expect - see above
pass
else:
cleaned_csv_content.append((fname, lname, e_mail)) # note additional parenthesesif validate_email(e_mail):
cleaned_csv_content.append((fname, lname, e_mail))Context
StackExchange Code Review Q#37298, answer score: 6
Revisions (0)
No revisions yet.