搜索
首页后端开发Python教程Python 中奇怪的&#else&#

The Strange

条件语句中的 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 重写此方法以进行异常处理和循环:

  1. 异常只能在 self.find_element(locator) 行中引发。如果未引发异常,则应执行退出循环。所以我们可以将break移动到else块。
  2. 如果循环不是因为中断而退出,我们的方法应该引发异常。因此我们可以将异常引发移至循环的 else 子句。
  3. 如果您依次执行转换 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中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python的主要目的:灵活性和易用性Python的主要目的:灵活性和易用性Apr 17, 2025 am 12:14 AM

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

Python:多功能编程的力量Python:多功能编程的力量Apr 17, 2025 am 12:09 AM

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

每天2小时学习Python:实用指南每天2小时学习Python:实用指南Apr 17, 2025 am 12:05 AM

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

Python与C:开发人员的利弊Python与C:开发人员的利弊Apr 17, 2025 am 12:04 AM

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

Python:时间投入和学习步伐Python:时间投入和学习步伐Apr 17, 2025 am 12:03 AM

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

Python:自动化,脚本和任务管理Python:自动化,脚本和任务管理Apr 16, 2025 am 12:14 AM

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

Python和时间:充分利用您的学习时间Python和时间:充分利用您的学习时间Apr 14, 2025 am 12:02 AM

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

Python:游戏,Guis等Python:游戏,Guis等Apr 13, 2025 am 12:14 AM

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

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

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

SecLists

SecLists

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

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能