1.python递归函数入坑:

ip_list = []
def chooseDebugLinux():import randominfo = {}dockerip = random.randint(1, 3)global ip_listif dockerip not in ip_list:print(dockerip, '*' * 50)ip_list.append(dockerip)else:chooseDebugLinux()print("dockerip列表:", ip_list)info['dockerip'] = dockerip# info['dockerip'] = "10.2xxxxxx1"info['dockername'] = 'docker--%s--%s' % ("11111111111", info['dockerip'])print(info['dockername'], '*' * 50)return info, info['dockername']if __name__ == '__main__':import threadingfor i in range(10):threading.Thread(target=chooseDebugLinux).start()

问题产生:一段时间内并发10个请求,我的ip是一个范围内的,所以当有人使用了我就不能让其他人使用,这个时候我用到了递归函数.

大致如上,在进行递归的过程中,我在递归下面写了部分代码.但是令我们想不到的错误发生了,他虽然产生了递归,但是当递归结束他还会回到上一次产生递归的条件,也就是将函数内的变量回滚到上一次的递归中.

直到递归第一次产生的地方(变量也回滚了),这个时候,才会执行递归下面的代码但是我需要的而变量是递归之后产生的变量,而现在却因为递归的回滚操作,是的变量回滚到最初的时候.

这个时候的变量不是我需要的,所以程序一直报错.(所以我认为这是python的垃圾回收机制导致的内存释放问题,递归下面不要出现调用递归之上的变量的代码,否则你永远拿不到正确的结果)

下面是更改之后的代码:

ip_list = []
def chooseDebugLinux():import randominfo = {}dockerip = random.randint(1, 3)global ip_listif dockerip not in ip_list:print(dockerip, '*' * 50)ip_list.append(dockerip)info['dockerip'] = dockeripinfo['dockername'] = 'docker--%s--%s' % ("11111111111", info['dockerip'])else:chooseDebugLinux()return info, info['dockername']if __name__ == '__main__':import threadingfor i in range(10):threading.Thread(target=chooseDebugLinux).start()

2.错误二:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def check_file_exists(planName):"""检查脚本文件是否存在"""jmeter_xml_root = os.path.join(settings.BASE_DIR, "xxxxx")ret = os.path.exists(jmeter_xml_root)num = 3if not ret and num > 0:num -= 1time.sleep(1)check_file_exists(planName)return ret

这次又写了一个bug,这个函数是一个死循环,递归进去之后每次都将num重新改为3,根本出不来.

3.错误三:

def connection():print("进入函数")flag = Falsecount = 3while not flag and count > 0:try:# 由于这里莫名其妙到第四个docker链接之后一直报错,所以在这里尝试连接三次1/0count -= 1flag = Trueexcept Exception as e:print("发生错误,进入循环")pass

这次又是个bug还好我检查了,因为我将count-=1卸载D.SFTPConnect()下面,如果连接错误它永远也不会减一,导致循环我先进行.所以这次有给我提了个醒,关于递归和while这种容易出现死循环的代码必须进行测试才可以使用.其实只需要将count-=1移动到 1/0 上面就能解除.

python递归函数错误使用方式相关推荐

  1. python concat函数 多张表_教你用python递归函数求n的阶乘,优缺点及递归次数设置方式

    本文内容介绍了python递归函数求n的阶乘,优缺点及递归次数设置方式,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 递归函数两大特点: 1.能够调用函数自身 2.至少有一个出口( ...

  2. python中递归函数写法_《Python入门08》你知道Python递归函数怎么写吗~~

    点击上方的"小小白AI",选择"关注" 重磅知识,第一时间送达 前言 直入主题~~~ 1.什么是递归函数 前面深入介绍了如何创建和调用函数.你知道,函数可调用其 ...

  3. python中的递归怎么写_《Python入门08》你知道Python递归函数怎么写吗~~

    点击上方的"小小白AI",选择"关注" 重磅知识,第一时间送达 前言 直入主题~~~ 1.什么是递归函数 前面深入介绍了如何创建和调用函数.你知道,函数可调用其 ...

  4. python返回错误提示_python 错误处理

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  5. python常见错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  6. python基础——错误处理

    python基础--错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数 ...

  7. 下列哪个不是python元组的定义方式_Python基础知识笔试

    Python基础知识笔试 单选题(2.5分*20题) 1. 下列哪个表达式在Python中是非法的? B A. x = y = z = 1 B. x = (y = z + 1) C. x, y = y ...

  8. python语法错误怎么办_python错误处理详解

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  9. Python笔记---错误笔记

    Python---错误笔记 1. Python编码问题: 我们在编写 Python 脚本时,往往会写上中文凝视. 可是有时候,当我们执行程序时.却发现例如以下错误:SyntaxError: Non-A ...

最新文章

  1. 2021阿里全球数学竞赛获奖名单出炉!北大获奖人数最多!
  2. 比特币(包括BTC和BCH)的零确认到底安不安全?
  3. ProxySQL 监控和统计
  4. [转]C++结构体|类 内存对齐详解
  5. 【山西】2021年下半年软考报考时间及通知
  6. (转)css中通常会用到浮动与清除,也是一个必须掌握的知识点,概念性的东西不多说,下面举几个例子,来说明它的用法:1.文字环绕效果 2.多个div并排显示 3.清除浮动(默认显示)...
  7. Redis 集群搭建和简单使用
  8. anacodna/python 安装 tensorflow
  9. poj 2195 二分图带权匹配+最小费用最大流
  10. 2021年电工杯B题附代码、附论文——光伏建筑一体化板块指数发展趋势分析及预测
  11. 【吃豆游戏----HTML+JS+CSS等实现,效果+源代码】
  12. 高效开发神器 | 合宙LuatIDE 1.1.0正式版本免费下载
  13. 工商银行支付接口开发Java
  14. 5分钟用C#实现串口助手
  15. linux dns访问日志内容格式,谢烟客---------Linux之DNS请求流程及资源记录定义
  16. Esp8266 进阶之路19 【外设篇①】esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。(附带Demo)
  17. 随机数字信号处理实验报告三——Levinson和Burg递推法MATLAB实现
  18. Java多线程学习——01
  19. 服务器sever2008如何取消IE增强安全配置
  20. assertThat详解

热门文章

  1. xfermode的基本用法
  2. 安全专家呼吁希拉里要求重新计票
  3. 乐视云没创意,还拿“免费”说事儿
  4. 在路由器使用ACL防止IP地址欺骗
  5. 恶心的C语言strtok函数
  6. [数据恢复答疑]有关还原精灵保护系统的数据恢复
  7. 如何解决大量字段的录入交互界面的设计呢?
  8. www.python123.com_Python123
  9. SAP内存和ABAP内存的简单介绍说明
  10. sap 判断字串是不是为数字