如何检查函数返回的错误类型(strconv.Atoi)
How to check err type returned from function(strconv.Atoi)
我有以下测试 strconv.Atoi()
的基本代码:
package main
import (
"fmt"
"strconv"
)
func main() {
var a int
var b string
var err Error
b = "32"
a,err = strconv.Atoi(b)
fmt.Println(a)
fmt.Println(err)
}
如果 strconv.Atoi()
中出现错误,我想处理,特别是如果错误是由于语法或范围引起的,strconv.Atoi()
可以提供的条件。为此,我尝试了这个:
package main
import (
"os"
"fmt"
"strconv"
)
func main() {
var a int
var b string
var err error
b = "32"
a,err = strconv.Atoi(b)
if(err.Err == ErrSyntax) {
fmt.Println("ERROR")
os.Exit(1)
}
fmt.Println(a)
fmt.Println(err)
}
我得到的结果是:
% go build test.go
# command-line-arguments
./test.go:19:8: err.Err undefined (type error has no field or method Err)
./test.go:19:16: undefined: ErrSyntax
想了解如何处理这两个错误Atoi
可以return(ErrSyntax
,ErrRange
).
包的包文档显示没有包限定符的名称,要从其他地方使用它们,您必须限定它们。所以试试 strconv.ErrSyntax
.
但这并没有多大帮助,因为没有 .Err
通用错误接口的成员。要检查这一点,您必须知道返回的错误实际上是 strconv.*NumError
。根据文档,应该是这样。
https://play.golang.org/p/UKL6kKDqSx4
if err != nil && err.(*strconv.NumError).Err == strconv.ErrSyntax {
fmt.Println("syntax error")
os.Exit(1)
}
您可以使用 errors
package (Working with Errors in Go 1.13):
if errors.Is(err, strconv.ErrSyntax) {
fmt.Println("syntax error")
os.Exit(1)
}
我有以下测试 strconv.Atoi()
的基本代码:
package main
import (
"fmt"
"strconv"
)
func main() {
var a int
var b string
var err Error
b = "32"
a,err = strconv.Atoi(b)
fmt.Println(a)
fmt.Println(err)
}
如果 strconv.Atoi()
中出现错误,我想处理,特别是如果错误是由于语法或范围引起的,strconv.Atoi()
可以提供的条件。为此,我尝试了这个:
package main
import (
"os"
"fmt"
"strconv"
)
func main() {
var a int
var b string
var err error
b = "32"
a,err = strconv.Atoi(b)
if(err.Err == ErrSyntax) {
fmt.Println("ERROR")
os.Exit(1)
}
fmt.Println(a)
fmt.Println(err)
}
我得到的结果是:
% go build test.go
# command-line-arguments
./test.go:19:8: err.Err undefined (type error has no field or method Err)
./test.go:19:16: undefined: ErrSyntax
想了解如何处理这两个错误Atoi
可以return(ErrSyntax
,ErrRange
).
包的包文档显示没有包限定符的名称,要从其他地方使用它们,您必须限定它们。所以试试 strconv.ErrSyntax
.
但这并没有多大帮助,因为没有 .Err
通用错误接口的成员。要检查这一点,您必须知道返回的错误实际上是 strconv.*NumError
。根据文档,应该是这样。
https://play.golang.org/p/UKL6kKDqSx4
if err != nil && err.(*strconv.NumError).Err == strconv.ErrSyntax {
fmt.Println("syntax error")
os.Exit(1)
}
您可以使用 errors
package (Working with Errors in Go 1.13):
if errors.Is(err, strconv.ErrSyntax) {
fmt.Println("syntax error")
os.Exit(1)
}