2

我正在编写一个 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 could not convert string to float:.

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

            try:
                report.mean_air_temp = float(line[4])
            except(ValueError):
                report.mean_air_temp = None

这给了我所需的结果,但看起来并不那么健壮/优雅。

我将不胜感激有关如何处理此代码块的任何指导。

4

1 回答 1

3

将转换包装为函数调用中的浮点数。

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
于 2012-06-22T20:58:45.150 回答