Ошибка strconv.ErrSyntax

Ошибка strconv.ErrSyntax возникает при попытке преобразования строки в число, если строка содержит недопустимые символы или имеет неправильный формат. Эта ошибка возвращается функциями пакета strconv, такими как ParseInt, ParseFloat, ParseUint и другими, когда входная строка не может быть интерпретирована как число.

Ошибка возвращается в составе типа *strconv.NumError, где поле Err содержит саму ошибку, а поле Func указывает на функцию, которая ее вызвала. Это позволяет точно определить, на каком этапе и при обработке какого значения произошла синтаксическая ошибка.

Синтаксис

goerr := strconv.ErrSyntax

Константа strconv.ErrSyntax имеет тип error и возвращает строку "syntax error". Она используется для сравнения с ошибкой, возвращаемой функциями преобразования.

Пример

Давайте попробуем преобразовать строку с недопустимыми символами в число:

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.ParseInt("123abc", 10, 64)
  if err != nil {
    fmt.Println("Error:", err)
    if err == strconv.ErrSyntax {
      fmt.Println("Syntax error detected")
    }
  }
}

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

go"Error: strconv.ParseInt: parsing \"123abc\": invalid syntax"
"Syntax error detected"

Пример

Еще один пример - попытка преобразования пустой строки:

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.ParseFloat("", 64)
  if err != nil {
    fmt.Println("Error:", err)
    if errors.Is(err, strconv.ErrSyntax) {
      fmt.Println("Empty string cannot be parsed")
    }
  }
}

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

go"Error: strconv.ParseFloat: parsing \"\": invalid syntax"
"Empty string cannot be parsed"

Пример

Рассмотрим случай с числом с плавающей точкой, содержащим лишние пробелы:

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.ParseInt(" 42 ", 10, 64)
  if err != nil {
    fmt.Println("Error:", err)
  } else {
    fmt.Println("Success")
  }
}

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

go"Error: strconv.ParseInt: parsing \" 42 \": invalid syntax"

Пример

Проверим, как обработать ошибку при преобразовании шестнадцатеричного числа:

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.ParseInt("0x1A", 10, 64)
  if err != nil {
    fmt.Println("Error:", err)
    if err == strconv.ErrSyntax {
      fmt.Println("Hex prefix not allowed with base 10")
    }
  }
}

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

go"Error: strconv.ParseInt: parsing \"0x1A\": invalid syntax"
"Hex prefix not allowed with base 10"

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

  • функцию strconv.ParseInt,
    которая преобразует строку в целое число
  • функцию strconv.ParseFloat,
    которая преобразует строку в число с плавающей точкой
  • функцию strconv.ParseUint,
    которая преобразует строку в беззнаковое целое число
  • ошибку strconv.ErrRange,
    которая возникает при выходе числа за допустимый диапазон