Django正在读取上载的CSV文件,其中包含一些空字段

Django正在读取上载的CSV文件,其中包含一些空字段,django,csv,Django,Csv,我正在编写一个Django视图,它获取一个附加的csv文件并将其读入数据库: 视图。py: def climate_upload(request): ... if form.is_valid(): # All validation rules pass file = request.FILES['attach'] for line in file: line = line.split(';')

我正在编写一个Django视图,它获取一个附加的csv文件并将其读入数据库:

视图。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无法将字符串转换为float:

我可以为每个字段执行此操作:

            try:
                report.mean_air_temp = float(line[4])
            except(ValueError):
                report.mean_air_temp = None
这给了我所需的结果,但似乎没有那么健壮/优雅


如果您能提供有关如何处理此代码块的指导,我将不胜感激。

在函数调用中包装转换为float

def convert_value(val, conversion=float):
    try:
        return conversion(val)
    except ValueError:
        return None


如果文件中的数字为0.0,则后者可能不会产生所需的输出。我使用了第二种方法。谢谢你。
report.something = float(line[x]) if line[x] is not None else None