• 在python中使用except捕获任何类型的异常


    1 try:
    2     正常的操作
    3    ......................
    4 except:
    5     发生异常,执行这块代码
    6    ......................
    7 else:
    8     如果没有异常执行这块代码

    使用except二不带任何的异常类型,可以捕获程序代码中的所有异常信息,这种方式捕获的异常不区分类型,虽然官方不推荐使用,但是我觉得在发送http请求中使用的比较广泛,可以有效的减少程序因遇到异常而退出。

      from loguru import logger
    
    
    def _handle_request_error(self, method, request_path, params):
    
            if method == c.GET:
                request_path = request_path + utils.parse_params_to_str(params)
            # url
            url = c.API_URL + request_path
    
            timestamp = utils.get_timestamp()
    
            # sign & header
            if self.use_server_time:
                timestamp = self._get_timestamp()
    
            body = json.dumps(params) if method == c.POST else ""
    
            sign = utils.sign(utils.pre_hash(timestamp, method, request_path, str(body)), self.API_SECRET_KEY)
            header = utils.get_header(self.API_KEY, sign, timestamp, self.PASSPHRASE, self.flag)
    
            # send request
            response = None
    
            if method == c.GET:
                response = requests.get(url, headers=header)
            elif method == c.POST:
                response = requests.post(url, data=body, headers=header)
    
            return response
    
        def _request(self, method, request_path, params):
            sleep_times = 1
            tmp_method = method
            tmp_request_path = request_path
            tmp_params = params
    
            try:
                if method == c.GET:
                    request_path = request_path + utils.parse_params_to_str(params)
                # url
                url = c.API_URL + request_path
    
                timestamp = utils.get_timestamp()
    
                # sign & header
                if self.use_server_time:
                    timestamp = self._get_timestamp()
    
                body = json.dumps(params) if method == c.POST else ""
    
                sign = utils.sign(utils.pre_hash(timestamp, method, request_path, str(body)), self.API_SECRET_KEY)
                header = utils.get_header(self.API_KEY, sign, timestamp, self.PASSPHRASE, self.flag)
    
                # send request
                response = None
    
                if method == c.GET:
                    response = requests.get(url, headers=header)
                elif method == c.POST:
                    response = requests.post(url, data=body, headers=header)
            except
                while not str(response.status_code).startswith('2'):
                    time.sleep(2)
                    response = self._handle_request_error(tmp_method, tmp_request_path, tmp_params)
                    append_write_file(str(response))
                    datetime.datetime.now()
                    append_write_file(str(datetime.datetime.now()) + " 请求的Url=" + str(url))
                    append_write_file(str(datetime.datetime.now()) + " 请求的body=" + str(body))
                    append_write_file(str(datetime.datetime.now()) + " 进入请求循环不断的进行相关的请求")
                    sleep_times = sleep_times + random.randint(0, 9)
                    print(str(response))
                return response.json()
            else:
                print("请求发送正常")
  • 相关阅读:
    IntelliJ IDEA 2017版 SpringBoot的核心配置详解
    路由追踪程序traceroute/tracert分析与科普
    traceroute追踪路由命令
    ping 命令
    hostname命令,修改主机名及host文件
    net-tools工具arp命令
    ifup 和 ifdown
    net-tools工具ifconfig 命令
    iproute2 对决 net-tools
    什么是带内管理 带外管理
  • 原文地址:https://www.cnblogs.com/zhaooyw/p/16029161.html
Copyright © 2020-2023  润新知