cindyber 发表于 2025-1-9 23:24:29

try finally结构中,为什么我没有触发‘晚安’ 两个字

如题
>>> try:
...   while True:
...         pass
... finally:
...   print('晚安')
...   
KeyboardInterrupt

FishC 发表于 2025-1-9 23:25:00

在这个代码片段中,`try...finally` 结构用于确保 `finally` 块中的代码在 `try` 块完成后总会执行。然而,在你的例子中,由于 `while True` 是一个无限循环,程序将一直运行在这个循环中,通常是无法手动中断的,除非触发异常。

当你按下 `Ctrl+C` 键来中断程序执行时,抛出了一个 `KeyboardInterrupt` 异常,程序跳出了 `try` 块来处理这个异常,这就导致 `finally` 块执行,打印出 `'晚安'`。

如果没有在执行过程中人为中断程序,`finally` 块永远不会执行输出 `'晚安'`。确保不中断的情况下执行 `finally`,可以在 `try` 块中加入可以终止循环的条件。

所以,正常情况下,如果你中断了程序,你应该看到 `'晚安'` 被打印出来。可能是因为键盘操作或者输入有误导致没有正常看到输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-1-10 00:02:50

格式不对
try:
    while True:
      pass
finally:
    print('晚安')

小甲鱼的二师兄 发表于 2025-1-10 01:15:16



可以丫

Tommy49 发表于 2025-1-10 07:59:48

>>> try:
    print("Program is starting")
    while True:
      pass

finally:
    print("Good night")

   
Program is starting
Good night
Traceback (most recent call last):
File "<pyshell#1>", line 4, in <module>
    pass
KeyboardInterrupt
>>> 可以的

Tommy49 发表于 2025-1-10 08:01:56

因为是无限循环,需要用Ctrl + C人工中断,中断循环后就会先执行finally打印“晚安”

cindyber 发表于 2025-1-10 17:08:11

Tommy49 发表于 2025-1-10 08:01
因为是无限循环,需要用Ctrl + C人工中断,中断循环后就会先执行finally打印“晚安”

我人工中断了 返回了keyboardInterrupt,但是没有打印晚安

cindyber 发表于 2025-1-10 17:23:52

某一个“天” 发表于 2025-1-10 00:02
格式不对

啊 我之前是哪里格式错了呀

某一个“天” 发表于 2025-1-10 17:40:28

cindyber 发表于 2025-1-10 17:23
啊 我之前是哪里格式错了呀

缩进有问题

小甲鱼 发表于 2025-1-10 19:00:55



代码没问题
页: [1]
查看完整版本: try finally结构中,为什么我没有触发‘晚安’ 两个字