从net / http程序包中的* urlError访问

时间:2020-06-21 09:15:41

标签: go

我使用Client.Get(url)函数访问网页。

timeout := time.Duration(wgetTimeout) * time.Second
client := http.Client{Timeout: timeout}

// Get page and check for error (timeout, http ...)
res, err := client.Get(url)
if err != nil {
    return "", err
}
defer res.Body.Close()

Client.Get() function doc说:

任何返回的错误将是* url.Error类型。如果请求超时,则url.Error值的Timeout方法将报告true。

如何访问类似bool Timeout()的url.Error方法?

发布在here上的解决方案要求使用Client.Do()函数。

2 个答案:

答案 0 :(得分:2)

GoDoc: Type *url.Error

if e, ok := err.(*url.Error); ok && e.Timeout() {
    log.Fatal("timeout is: ", e.Timeout())
} else if err != nil {
    panic(err)
}

答案 1 :(得分:0)

使用os.IsTimeout确定错误是否具有返回true的Timeout()方法。

from telegram.error import BadRequest
def is_user_there(channel, chat_id) -> bool:
    try:
       chat_member = context.bot.getChatMember(channel,update.message.chat_id) # this will return a ChatMember object
       if chat_member.status in [‘administrator’, ‘creator’, ‘member’]:
         return True
       else:
         return False
    except BadRequest:
       return False