我正在编写一个Django视图,它接受一个附加的csv文件并将其读入db:
views.py:
def climate_upload(request):
...
if form.is_valid(): # All validation rules pass
file = request.FILES['attach']
for line in file:
line = line.split(';')
report = Site1()
...
# These fields values be empty, integer or float
report.mean_air_temp = float(line[4])
report.min_air_temp = float(line[5])
report.max_air_temp = float(line[6])
report.sea_temp = float(line[7])
report.mean_rel_hum = float(line[8])
report.precipitation = float(line[9])
report.save()
file.close()
我知道这是非常粗糙的代码,但是如果我运行它并且其中一个字段为空('')我得到ValueError could not convert string to float:
。
我可以为每个字段执行此操作:
try:
report.mean_air_temp = float(line[4])
except(ValueError):
report.mean_air_temp = None
这给了我所需的结果,但似乎并不那么健壮/优雅。
我很感激有关如何处理此代码块的任何指导。
答案 0 :(得分:2)
在函数调用中将转换包装为float。
def convert_value(val, conversion=float):
try:
return conversion(val)
except ValueError:
return None
或
report.something = float(line[x]) if line[x] is not None else None