Ошибка strconv.ErrSyntax
Ошибка strconv.ErrSyntax возникает при попытке преобразования строки в число,
если строка содержит недопустимые символы или имеет неправильный формат.
Эта ошибка возвращается функциями пакета strconv, такими как ParseInt,
ParseFloat, ParseUint и другими, когда входная строка не может быть
интерпретирована как число.
Ошибка возвращается в составе типа *strconv.NumError, где поле Err
содержит саму ошибку, а поле Func указывает на функцию, которая ее вызвала.
Это позволяет точно определить, на каком этапе и при обработке какого значения
произошла синтаксическая ошибка.
Синтаксис
err := strconv.ErrSyntax
Константа strconv.ErrSyntax имеет тип error и возвращает строку
"syntax error". Она используется для сравнения с ошибкой, возвращаемой
функциями преобразования.
Пример
Давайте попробуем преобразовать строку с недопустимыми символами в число:
package 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")
}
}
}
Результат выполнения кода:
"Error: strconv.ParseInt: parsing \"123abc\": invalid syntax"
"Syntax error detected"
Пример
Еще один пример - попытка преобразования пустой строки:
package 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")
}
}
}
Результат выполнения кода:
"Error: strconv.ParseFloat: parsing \"\": invalid syntax"
"Empty string cannot be parsed"
Пример
Рассмотрим случай с числом с плавающей точкой, содержащим лишние пробелы:
package main
import (
"fmt"
"strconv"
)
func main() {
_, err := strconv.ParseInt(" 42 ", 10, 64)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Success")
}
}
Результат выполнения кода:
"Error: strconv.ParseInt: parsing \" 42 \": invalid syntax"
Пример
Проверим, как обработать ошибку при преобразовании шестнадцатеричного числа:
package 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")
}
}
}
Результат выполнения кода:
"Error: strconv.ParseInt: parsing \"0x1A\": invalid syntax"
"Hex prefix not allowed with base 10"
Смотрите также
-
функцию
strconv.ParseInt,
которая преобразует строку в целое число -
функцию
strconv.ParseFloat,
которая преобразует строку в число с плавающей точкой -
функцию
strconv.ParseUint,
которая преобразует строку в беззнаковое целое число -
ошибку
strconv.ErrRange,
которая возникает при выходе числа за допустимый диапазон