条件语句中的 else
我们都写过条件语句,并且可能至少使用过一次完整的 if-elif-else 结构。
例如,为所需的浏览器创建 Web 驱动程序实例时:
browser = get_browser() if browser == 'chrome': driver = Chrome() elif browser == 'firefox': driver = Firefox() else: raise ValueError('Browser not supported')
此代码段支持使用 Chrome 和 Firefox 进行测试,如果提供不受支持的浏览器,则会引发异常。
一个鲜为人知的事实是,Python 支持将 else 子句与循环和异常处理结合使用。
Else 带循环
假设我们有一个单词列表,我们想要打印它们,只要它们以大写字母开头。最后,我们要检查是否所有单词都已处理,如果是,则执行特定逻辑。
我们可以使用标志变量 is_all_words_processed,如果遇到无效单词,则将其设置为 False,然后在循环外检查它以执行逻辑。
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] is_all_words_processed = True for season in seasons: if not season.istitle(): is_all_words_processed = False break print(season) if is_all_words_processed: print('All seasons were processed')
Python 允许我们通过将所有单词都有效时的逻辑放入 else 子句中来避免附加变量:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] for season in seasons: if not season.istitle(): break print(season) else: print('All seasons were processed')
只有当循环自然完成且没有中断时,else 块才会执行。如果循环被break中断,则else子句将不会运行。
这是用 while 循环重写的相同示例。对于 while,else 子句的行为方式相同:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] index = 0 while index <h3> 异常处理中的else </h3> <p>else 子句也可以用于异常处理。除了块之外,它必须在所有之后出现。仅当 try 块中没有引发异常时,else 块内的代码才会执行。</p> <p>例如,让我们读取一个包含两列数字的文件并打印它们的商。我们需要处理无效的文件名,而任何其他错误(例如,将值转换为数字或除以零)都会导致程序崩溃(我们不会处理它们)。<br> </p> <pre class="brush:php;toolbar:false">file_name = 'input.dat' try: f = open(file_name, 'r') except FileNotFoundError: print('Incorrect file name') else: for line in f: a, b = map(int, line.split()) print(a / b) f.close()
在此示例中,try 块仅包含可能引发捕获的异常的代码。
官方文档建议使用 else 块来避免无意中捕获 try 块之外的代码引发的异常。尽管如此,在异常处理中使用 else 可能感觉并不直观。
将 Else 与循环和异常处理相结合
这是我在采访中提出的一个问题。
假设我们有一个带有 find_element 方法的 Driver 类。 find_element 方法要么返回一个元素,要么引发 ElementNotFoundException 异常。在此示例中,它的实现是随机返回一个元素或以相等的概率引发异常。
使用基本的 Python 语法,实现一个方法 smart_wait(self, locator: str, timeout: float, step: float),该方法每步秒检查具有给定定位器的元素。如果在超时秒内找到该元素,则返回;否则,引发 ElementNotFoundException 异常。
browser = get_browser() if browser == 'chrome': driver = Chrome() elif browser == 'firefox': driver = Firefox() else: raise ValueError('Browser not supported')
这是实现此方法的一种方法:
- 只要超时未到,就会尝试查找元素。
- 如果找到该元素,则退出循环。
- 如果没有找到元素,则等待步长间隔。
- 如果超过超时,则引发 ElementNotFoundException。 这是一个简单的实现:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] is_all_words_processed = True for season in seasons: if not season.istitle(): is_all_words_processed = False break print(season) if is_all_words_processed: print('All seasons were processed')
我们可以通过使用 return 而不是 break 来稍微缩短逻辑,但现在让我们将其保留为 i 。
其实这个方法是在Selenium的WebDriverWait类中实现的——until方法:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] for season in seasons: if not season.istitle(): break print(season) else: print('All seasons were processed')
现在,让我们使用 else 重写此方法以进行异常处理和循环:
- 异常只能在 self.find_element(locator) 行中引发。如果未引发异常,则应执行退出循环。所以我们可以将break移动到else块。
- 如果循环不是因为中断而退出,我们的方法应该引发异常。因此我们可以将异常引发移至循环的 else 子句。
- 如果您依次执行转换 1 和 2,您会发现当前时间只能在循环条件下获取。
完成这些转换后,我们获得了一个使用 else 语句进行异常处理和循环的方法:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] index = 0 while index <hr> <p>我能说什么...这是 Python 鲜为人知的功能之一。不频繁使用可能会使其在每种情况下使用起来不太直观——这可能会导致混乱。然而,了解它并在需要时有效地应用它无疑是值得的。</p> <p><strong>新年快乐!</strong>???</p> <p>P.S.真的很可怕吗?:<br> 我自己写文章,但使用 ChatGPT 翻译它们。为了翻译,我删除了所有代码片段,但 ChatGPT 恢复了所有代码片段?</p>
以上是Python 中奇怪的else的详细内容。更多信息请关注PHP中文网其他相关文章!

Python的灵活性体现在多范式支持和动态类型系统,易用性则源于语法简洁和丰富的标准库。1.灵活性:支持面向对象、函数式和过程式编程,动态类型系统提高开发效率。2.易用性:语法接近自然语言,标准库涵盖广泛功能,简化开发过程。

Python因其简洁与强大而备受青睐,适用于从初学者到高级开发者的各种需求。其多功能性体现在:1)易学易用,语法简单;2)丰富的库和框架,如NumPy、Pandas等;3)跨平台支持,可在多种操作系统上运行;4)适合脚本和自动化任务,提升工作效率。

可以,在每天花费两个小时的时间内学会Python。1.制定合理的学习计划,2.选择合适的学习资源,3.通过实践巩固所学知识,这些步骤能帮助你在短时间内掌握Python。

Python适合快速开发和数据处理,而C 适合高性能和底层控制。1)Python易用,语法简洁,适用于数据科学和Web开发。2)C 性能高,控制精确,常用于游戏和系统编程。

学习Python所需时间因人而异,主要受之前的编程经验、学习动机、学习资源和方法及学习节奏的影响。设定现实的学习目标并通过实践项目学习效果最佳。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能