为什么是这样:需要通过才能继续处理? [关闭]

2023-11-27

有人可以解释为什么else: pass为了完成其余代码(最终的print 'processing...语句)要执行?请注意print in the else放在那里只是为了让我知道执行确实是在走这条路。

似乎每当continue没有执行,因为代码在else什么也没做。但是,如果我离开else出,没有进一步的内容for当条件为 False 时,循环似乎会被执行——当文件具有扩展名时do存在于目录中——这对我来说没有意义。文档说continue“继续最近的封闭循环的下一个循环”,很好,但是如果没有执行,处理不应该继续到下一个语句吗?

import os

source_dir = r'C:\Downloads'
ext = '.mp3'

for dirName, subdirList, fileList in os.walk(source_dir):
    if not any(os.path.splitext(fileName)[1].lower() == ext for fileName in fileList):
        print '  skipping "{}"'.format(dirName)
        continue
    else:  # why is this clause needed to continue this iteration of a loop?
        print 'contains   "{}"'.format(dirName)
        pass

    print 'processing "{}" which has "{}" files'.format(dirName, ext)

谜团已揭开

看似奇怪的行为是由于缩进问题造成的,该问题在上面的代码中不可见,通常在我的文本编辑器中也不可见。原来最后print语句缩进了 3 个空格,然后是一个制表符,这使得它看起来与else,但实际上它要么遵循pass in the else如果存在,或者遵循continue在第一部分if。显然让我很困惑。

这是我的文本编辑器中代码的屏幕截图,其中“显示空间/制表符”选项已打开。红点代表空格,红色右角代表(») 代表制表符:

screenshot of file in my editor showing bad indentation


你不需要它。我运行了以下两个脚本:

#test1.py
import os

source_dir = '.'
ext = '.txt'

for dirName, subdirList, fileList in os.walk(source_dir):
    if not any(os.path.splitext(fileName)[1].lower() == ext for fileName in fileList):
        print '  skipping "{}"'.format(dirName)
        continue
    else:  # why is this clause needed to continue this iteration of a loop?
        print 'contains   "{}"'.format(dirName)
        pass

    print 'processing "{}" which has "{}" files'.format(dirName, ext)

and

#test2.py
import os

source_dir = '.'
ext = '.txt'

for dirName, subdirList, fileList in os.walk(source_dir):
    if not any(os.path.splitext(fileName)[1].lower() == ext for fileName in fileList):
        print '  skipping "{}"'.format(dirName)
        continue
    #else:  # why is this clause needed to continue this iteration of a loop?
    #    print 'contains   "{}"'.format(dirName)
    #    pass

    print 'processing "{}" which has "{}" files'.format(dirName, ext)

我将它们运行为:

python test1.py > junk.log
python test2.py > junk.log2

这是前几行junk.log:

test $ head junk.log
processing "." which has ".txt" files
  skipping "./new"
  skipping "./unum"
processing "./unum/kiv-unum-409befe069ac" which has ".txt" files
  skipping "./unum/kiv-unum-409befe069ac/build"
  skipping "./unum/kiv-unum-409befe069ac/build/bdist.macosx-10.3-fat"
  skipping "./unum/kiv-unum-409befe069ac/build/lib"
  skipping "./unum/kiv-unum-409befe069ac/build/lib/tests"
  skipping "./unum/kiv-unum-409befe069ac/build/lib/unum"
  skipping "./unum/kiv-unum-409befe069ac/build/lib/unum/units

请注意“处理”行的存在。

Then I diff输出:

diff junk.log junk.log2

结果如下:

0a1
> contains   "."
3a5
> contains   "./unum/kiv-unum-409befe069ac"
14a17
> contains   "./unum/kiv-unum-409befe069ac/docs"
16a20
> contains   "./unum/kiv-unum-409befe069ac/nose-1.2.1-py2.7.egg/EGG-INFO"
19a24
> contains   "./unum/kiv-unum-409befe069ac/nose-1.2.1-py2.7.egg/nose"
30a36
> contains   "./unum/kiv-unum-409befe069ac/Unum.egg-info"

请注意,“处理”行没有差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么是这样:需要通过才能继续处理? [关闭] 的相关文章

随机推荐

  • 如何将 Swift 代码导入 Objective-C?

    我用 Swift 编写了一个库 但无法将其导入到我当前用 Objective C 编写的项目中 有什么方法可以导入吗 import SCLAlertView swift SCLAlertView swift file not found 你
  • JavaScript - 同步等待异步操作(睡眠)

    我知道这里被问过很多次 也被回答过很多次 这不是应该如何完成的方法 但再一次 是否有可能以某种方式调用异步函数 例如计时器 ajax 调用 基本上是常见的异步任务 并同步等待它结束 而不会出现 100 CPU 使用率和阻塞浏览器的情况 简单
  • Gradle - Groovy 和 Java 类依赖 - 编译

    我的项目有 Java N 个文件 和 Groovy 代码 仅 1 个文件 Java 编译依赖于这个单个 Groovy 文件的类文件来进行 Java 编译 compileJava 任务成功 当我不使用 src java 作为 main gt
  • 中的换行符

    有没有办法在消息中换行
  • Python 中的 Hopcroft–Karp 算法

    我正在努力实施霍普克罗夫特卡普算法在Python中使用networkx作为图形表示 目前我到目前为止 Algorithms for bipartite graphs import networkx as nx import collecti
  • 每个 JavaScript 程序员应该知道什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • phpexcel下载

    你好 我是 phpexcel 的新手 我想知道是否有某种方法将我创建的 Excel 发送给客户端下载而不将其保存在我的服务器上或在他下载后立即将其删除 我正在尝试在页面上创建一个 导出按钮 该按钮将为用户提供一个 弹出窗口 其中包含他想要我
  • 如何在 SublimeText 中使用自定义字体

    我知道用户可以通过以下方式更改首选项中的 font face font face gohufont 11 font size 11 但是 每次我尝试添加 已安装的 非系统字体 例如Gohufont上面 它不起作用 安装TTF尽管有特定于平台
  • 如何从 qmake 获取 Makefile

    给定一个 x pro 文件 我如何生成 makefile 运行 qmake x pro 会生成一个没有 Makefile 的 x pbproj 目录 Thanks 编辑 添加信息 关于 pro 文件和平台 我在 Mac OS X 10 6
  • React (JSX) 中的子级与父级通信无需流量

    我对 React 还很陌生 我正在绞尽脑汁地试图解决一个在我看来很简单的问题 这是我构建的组件的图片 颜色选择组件 我想要完成的事情似乎微不足道 但实际上我读过的每一篇解释要做什么的文章都告诉我一些不同的东西 而且没有一个解决方案有效 它分
  • 按引用调用和按值调用之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 值参数和参考参数之间的区别 按引用调用和按值调用有什么区别 在 C 中 没有引用调用 您能得到的最接近的是获取一个地址 并传递该地址的副本 按值 见下文 在 C 中 按引用调用传递对对象的引用 原始对
  • 什么是 lambda 表达式?何时应该使用它?

    C 11 中的 lambda 表达式是什么 我什么时候会使用一个 他们解决了哪类在引入之前无法解决的问题 一些示例和用例会很有用 问题 C 包含有用的通用函数 例如std for each and std transform 这非常方便 不
  • C# 中的 XML 序列化和 DefaultValue("") 相关问题

    我的类属性具有将被序列化的默认值 public class DeclaredValue XmlElement ElementName Amount DataType double IsNullable false DefaultValue
  • 在R中显示UTF-8编码的汉字

    我尝试在 R 中打开包含 繁体 中文字符的 UTF 8 编码的 csv 文件 出于某种原因 R 有时将信息显示为中文字符 有时显示为 unicode 字符 例如 data lt read csv mydata csv encoding UT
  • 触发 Jenkins 基于新标签和提交构建

    我们正在使用 Git 插件 https wiki jenkins ci org display JENKINS Git Plugin 目前 只要将更改推送到 GitHub 我们就会通过 Webhooks 启动 Jenkins 构建 现在我们
  • 使用express.js进行路由-无法获取错误

    与 一起工作express js第一次 我坚持添加我的第一条路线 我的路线定义在app js像这样 app get user id photos function req res res send user req params id 然而
  • 阻止页面加载时触发 CSS 转换

    我遇到了 CSS 问题transition页面加载时触发属性 问题是当我应用color transition到一个元素 例如 transition color 2s 然后 当页面首次加载时 我的元素会从黑色闪烁到它自己指定的颜色 假设我有以
  • 如何在我的 Google Apps 脚本/Google 表格 HTML 中包含脚本?

    我无法让基于 Apps 脚本的 HTML 包含任何脚本 My doGet函数为HtmlService工作正常 function doGet return HtmlService createHtmlOutputFromFile myhtml
  • pylons mako如何检查变量是否存在

    在django中 我们可以这样做 views py def A request context test test return render to response index html context context instance
  • 为什么是这样:需要通过才能继续处理? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 有人可以解释为什么else pass为了完成其余代码