处理golang中的特定错误

时间:2015-11-30 21:45:21

标签: csv go error-handling

我试图忽略代码中的csv.ErrFieldCount错误,但似乎只能查看那个错误。我在这里做错了什么?

record, err := reader.Read()
if err != nil {
    if err == csv.ErrFieldCount {
        return nil
    }
    return err
}

但是当我运行代码时,csv文件的最后一行给了我这个错误pan line 11535, column 0: wrong number of fields in line

3 个答案:

答案 0 :(得分:14)

csv.Reader没有返回该错误,它会返回csv.ParseError。首先需要检查是否有ParseError,然后检查Err字段:

if err, ok := err.(*csv.ParseError); ok && err.Err == csv.ErrFieldCount {
    return nil
}

答案 1 :(得分:8)

将CSV Reader结构中的FieldsPerRecord设置为负数。然后ParseErrors将不会发生不等的字段计数。

见这里:

https://golang.org/pkg/encoding/csv/#example_Reader_options

答案 2 :(得分:5)

是的,它不是真的记录(也就是说,浏览文档并没有很快给你答案)。虽然Read()返回error,但它实际上是*csv.ParseError的一个实例,您可以断言并检查:

record, err := reader.Read()
if err != nil {
    if perr, ok := err.(*csv.ParseError); ok && perr.Err == csv.ErrFieldCount {
        return nil
    }
    return err
}