Python版本:2.7。操作系统:Windows 10 64位。在

注意:我找到了一种方法来解决下面描述的问题,它不使用try/except/else语句。我问下面的问题仅仅是因为我很好奇为什么代码的行为方式是这样的,以及是否有一种方法可以使用try/except/else完成我正在尝试的操作。在

我有一个名为blah.py的文件,其代码如下:import os

def makeFolder(dirName, num = 0):

try:

os.mkdir(dirName + '_' + str(num)) #error if argument of os.mkdir already exists

except:

makeFolder(dirName, num = num + 1)

else:

return dirName + '_' + str(num)

现在我进入Powershell,输入:

^{pr2}$

它做了我所期望的——创建了一个名为myFolder_0的文件夹,并打印myFolder_0和{}。现在,仍然在Powershell中,我键入:myStr1 = blah.makeFolder('myFolder')

print myStr1

print type(myStr1)

这一次它创建了一个名为myFolder_1的文件夹,但它没有打印myFolder_1和{},而是打印None和{}。每次我使用blah.makeFolder('myFolder'),它都会继续这样做。在

如果我把在Powershell中键入的命令放在脚本中,这种行为也会有奇怪的不同。我创建了一个名为blah2.py的文件,它与blah.py相同,但结尾有一个脚本:import os

def makeFolder(dirName, num = 0):

try:

os.mkdir(dirName + '_' + str(num)) #error if argument of os.mkdir already exists

except:

makeFolder(dirName, num = num + 1)

else:

return dirName + '_' + str(num)

myStr = makeFolder('myFolder')

print myStr

print type(myStr)

myStr1 = makeFolder('myFolder')

print myStr1

print type(myStr1)

然后在Powershell中:python blah2.py

这一次它使myFolder为0并打印myFolder_0和(因此myStr块与{}中的一样工作),然后进入无限递归(因此myStr1块不起作用)。因此,出于我不明白的原因,这种行为与互动会话中的不同。如果我再次输入python blah2.py,它将使myFolder为1并打印None和{}(myStr块),然后再次进入无限递归(myStr1块)。在

为什么脚本的行为与交互会话不同,为什么脚本中会发生无限递归,我的代码版本是否仍然使用try/except/else,但仍然有效?在

python try else_python try/except/else与递归相关推荐

  1. 关于学习Python的一点学习总结(30->递归实例)

    68.递归 先来两个例子: 1.阶乘 def Fact(num):result=numfor i in range(1,num):result*=ireturn result>>> ...

  2. LeetCode 111. Minimum Depth of Binary Tree--Java, Python解法--二叉树最小高度--迭代,递归

    题目地址:Minimum Depth of Binary Tree - LeetCode Given a binary tree, find its minimum depth. The minimu ...

  3. python 线程死锁_python线程死锁与递归锁

    死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...

  4. 11.python并发入门(part4 死锁与递归锁)

    一.关于死锁. 死锁,就是当多个进程或者线程在执行的过程中,因争夺共享资源而造成的一种互相等待的现象,一旦产生了死锁,不加人工处理,程序会一直等待下去,这也被称为死锁进程. 下面是一个产生" ...

  5. python中的代码复用与函数递归

    代码复用与模块化设计 所谓的代复用,顾名思义,也就说同一份代码在需要的时候可以被重复使用,有两种形式:一个是函数,一个是对象. 模块化设计,简单地来讲,就是通过函数或对象封装将程序划分为模块及模块间的 ...

  6. python实现数字循环相加_python使用递归、尾递归、循环三种方式实现斐波那契数列...

    在最开始的时候所有的斐波那契代码都是使用递归的方式来写的,递归有很多的缺点,执行效率低下,浪费资源,还有可能会造成栈溢出,而递归的程序的优点也是很明显的,就是结构层次很清晰,易于理解. 可以使用循环的 ...

  7. 学习笔记(28):Python网络编程并发编程-死锁与递归锁

    立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...

  8. 递归函数python有什么特点_Python中的递归

    在前面的讲解中,函数的调用通常发生在彼此不同的函数之间.其实,函数还有一种特殊的调用方式,那就是自己调用自己,这种方式称为函数递归调用. 递归,在程序设计中也是一个常用的技巧,甚至是一种思维方式,非常 ...

  9. python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...

    经典递归 汉诺塔问题 背景故事 传说印度某间寺院有三根柱子,上串64个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题( ...

最新文章

  1. 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
  2. gnuradio 初次使用
  3. 通信原理最佳接收-最佳接收准则
  4. SQL进阶,子查询与窗口函数
  5. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.13 创建视图...
  6. curl -L get.rvm.io | bash -s stable报错:连接不上服务器
  7. mysql 自动递增值归零_修改MySQL自动递增值
  8. Web应用部署在WebLogic中Basic认证无法运行问题及解决
  9. 第2章_Java基本语法(下):程序流程控制
  10. 零基础的人也能学好C++
  11. opencv图像分析与处理(12)-逆滤波、维纳滤波、约束最小二乘方滤波和几何均值滤波
  12. 计算机控制系统在电厂的应用,【2017年整理】计算机控制系统在火电厂中的应用...
  13. 地震波形自动分类及识别(构想)
  14. MyBatis之one2one与one2many
  15. 使用PlotNeuralNet绘制自己的网络结构图
  16. 猫掉进山洞C语言随机数,《小猫出生在秘密山洞》读书心得最新范文五篇
  17. 冰柱图分析:学习笔记
  18. MPU和MMU、MPU和MCU的区别
  19. 传智健康day04 预约管理-套餐管理
  20. 当我闲困的时候,我在想些什么

热门文章

  1. linux文件IO——文件IO介绍
  2. Leetcode--23.合并K个排序链表(Java)
  3. linux open 头文件_linux下通过共享内存和mmap实现进程间通讯
  4. 华为服务器更换主板后怎么进系统,服务器更换主板
  5. a标签居中 img vue,让html img图片垂直居中的三种方法
  6. matplotlib的colorbar设置显示的刻度个数和指定的刻度值
  7. 吴恩达斯坦福大学机器学习 CS229 课程学习笔记(二)
  8. 小甲鱼 OllyDbg 教程系列 (三) :PJ 软件功能限制
  9. Java并发编程实战~生产者-消费者模式
  10. 数据库事务的概念及其实现原理