РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1168 of 1593 menu

Тип csv.ParseError

Тип csv.ParseError используется для представления ошибок, которые могут возникнуть в процессе разбора CSV-данных с помощью пакета encoding/csv. Он содержит информацию о строке, столбце и типе ошибки, что помогает точно определить место и причину проблемы в исходных данных. Основные поля структуры: Line (номер строки), Column (номер столбца) и Err (текст ошибки).

Синтаксис

type ParseError struct { Line int Column int Err error } func (e *ParseError) Error() string

Поле Line содержит номер строки, в которой произошла ошибка (нумерация начинается с 1). Поле Column указывает номер столбца, где обнаружена проблема (также с 1). Поле Err хранит текст ошибки в виде интерфейса error, который можно распарсить для получения деталей.

Пример

Давайте создадим некорректные CSV-данные с пропущенной закрывающей кавычкой и обработаем ошибку разбора:

package main import ( "encoding/csv" "fmt" "strings" ) func main() { data := `name,age,city "John,30,New York Jane,25,Boston` reader := csv.NewReader(strings.NewReader(data)) records, err := reader.ReadAll() if err != nil { if parseErr, ok := err.(*csv.ParseError); ok { fmt.Printf("Error at line: %d, column: %d\n", parseErr.Line, parseErr.Column) fmt.Println("Error:", parseErr.Err) } else { fmt.Println("Other error:", err) } return } fmt.Println(records) }

Результат выполнения кода:

"Error at line: 2, column: 1" "Error: bare \" in non-quoted-field"

В данном примере ошибка возникла во второй строке в первом столбце из-за незакрытой кавычки.

Пример

Рассмотрим обработку ошибки при несоответствии количества полей в строках:

package main import ( "encoding/csv" "fmt" "strings" ) func main() { data := `name,age John,30,Engineer Jane,25` reader := csv.NewReader(strings.NewReader(data)) reader.FieldsPerRecord = 2 for { record, err := reader.Read() if err != nil { if parseErr, ok := err.(*csv.ParseError); ok { fmt.Printf("Line: %d, Column: %d\n", parseErr.Line, parseErr.Column) fmt.Printf("Error type: %v\n", parseErr.Err) } else { fmt.Println("Other error:", err) } break } fmt.Println(record) } }

Результат выполнения кода:

"[John 30]" "Line: 2, Column: 1" "Error type: wrong number of fields"

Здесь вторая строка содержит три поля, хотя ожидается два. Ошибка возникает при попытке прочитать вторую запись.

Пример

Покажем, как обработать ошибку парсинга при чтении всех записей с помощью ReadAll:

package main import ( "encoding/csv" "fmt" "strings" ) func main() { data := `id,name 1,Alice 2,Bob 3,Charlie` reader := csv.NewReader(strings.NewReader(data)) reader.Comment = '#' records, err := reader.ReadAll() if err != nil { switch e := err.(type) { case *csv.ParseError: fmt.Printf("Parse error at line %d, column %d: %v\n", e.Line, e.Column, e.Err) default: fmt.Printf("Unexpected error: %v\n", e) } return } for _, row := range records { fmt.Println(row) } }

Результат выполнения кода:

"[1 Alice]" "[2 Bob]" "[3 Charlie]"

В этом примере данные корректны, поэтому ошибок не возникает, и все записи успешно выводятся.

Смотрите также

  • тип csv.Reader,
    который используется для чтения CSV-данных
  • функцию csv.Reader.Read,
    которая читает одну запись из CSV
  • функцию csv.Reader.ReadAll,
    которая читает все записи из CSV
  • константу csv.ErrFieldCount,
    которая возвращается при несоответствии количества полей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить