ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

踩坑日记(一)

2021-09-12 13:30:06  阅读:190  来源: 互联网

标签:fails url text ret headers json 日记



团队博客: CSDN AI小组


2021/09/12,踩坑日记(一):

首先,我们来看一段代码:

def request_create_commnuity(self, url, param):
        fails = 0
        while True:
            try:
                if fails >= 20:
                    break
                headers = {'Content-Type':"application/json"}
                ret = requests.post(url=url, data=json.dumps(param), headers=headers, timeout=10)
                if ret.status_code == 200:
                    text = json.loads(ret.text)
                else:
                    continue
            except Exception as e:
                fails += 1
                print('网络连接出现问题, 正在尝试再次请求: ', fails)
            else:
                break
        return text

看起来好像没什么问题对不对。

如果你运气好,接口参数完全传对,网络也正常,这段代码是没什么问题的。
但是,开发过程中,往往运气没这么好。
假如这个接口在你不知道的情况下改了参数,那么,这段代码就存在很大的问题。

假如你参数传错了:
1、ret.status_code不等于200,但程序不会有任何提示,以至于你根本看不出来是参数传错了
2、当引发异常时,打印出来的是网络连接出现问题,给人误导。

在开发过程中,上面两个问题,就是我最近遇到的问题,当然,这代码是我写的,写出这种不严谨的代码,给自己制造了困难,因此,写下这篇文章记录下这种低级错误,警醒自己以后不再犯此类错误。

将代码简单改写下,即使出现问题,也能够及时排查出来:

    def request_create_commnuity(self, url, param):
        fails = 0
        while True:
            try:
                if fails >= 20:
                    break
                headers = {'Content-Type':"application/json"}
                ret = requests.post(url=url, data=json.dumps(param), headers=headers, timeout=10)
                if ret.status_code == 200:
                    text = json.loads(ret.text)
                else:
                    print(ret.raw())
                    continue
            except Exception as e:
                print(e)
                fails += 1
            else:
                break
        return text

1、当ret.status_code不等于200时,打印出报错信息,根据报错信息,能快速定位报错原因
2、当出现异常时,打印出报错信息,快速定位报错原因

总结:
以上两个问题,都是由于没有正确规范地对异常做处理,导致错误无法快速定位。
日后务必注意此类问题,规范自己写的代码。

感谢每一次跌倒都有搀扶的手


团队博客: CSDN AI小组


标签:fails,url,text,ret,headers,json,日记
来源: https://blog.csdn.net/qq_44193969/article/details/120249500

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有