鱼C论坛

 找回密码
 立即注册
查看: 1700|回复: 4

[已解决]Python 异常的小问题

[复制链接]
发表于 2023-4-13 19:21:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
try 中的 return True 有语法错误吗? 为啥结果只返回了False 没有返回True啊 截屏2023-04-13 19.12.43.png
最佳答案
2023-4-13 19:22:01
本帖最后由 isdkz 于 2023-4-13 19:25 编辑

你好!try中的return True语法本身是没有问题的。然而,在你的例子中,finally语句块也包含了一个return语句。这就导致了bool_return()函数总是返回False。

当try和finally语句都有return语句时,Python的执行逻辑是这样的:

  • 首先,执行try语句块中的代码。在你的例子中,这意味着执行return True。这时,Python会计算并准备返回True。
  • 然后,无论try语句块中是否发生异常,Python都会执行finally语句块中的代码。在你的例子中,这意味着执行return False。
  • 在执行完finally语句块后,Python将返回finally语句块中的值(即False),而不是try语句块中的值(即True)。因此,bool_return()函数总是返回False。


为了让你的函数在不同情况下返回True或False,你可以尝试以下方式:
def bool_return():
    try:
        # 这里放可能会抛出异常的代码
        return True
    except:
        # 这里处理异常,例如打印错误信息
        return False

这样,如果try语句块中的代码成功执行,函数将返回True。如果发生异常,函数将执行except语句块并返回False。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-13 19:22:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-4-13 19:25 编辑

你好!try中的return True语法本身是没有问题的。然而,在你的例子中,finally语句块也包含了一个return语句。这就导致了bool_return()函数总是返回False。

当try和finally语句都有return语句时,Python的执行逻辑是这样的:

  • 首先,执行try语句块中的代码。在你的例子中,这意味着执行return True。这时,Python会计算并准备返回True。
  • 然后,无论try语句块中是否发生异常,Python都会执行finally语句块中的代码。在你的例子中,这意味着执行return False。
  • 在执行完finally语句块后,Python将返回finally语句块中的值(即False),而不是try语句块中的值(即True)。因此,bool_return()函数总是返回False。


为了让你的函数在不同情况下返回True或False,你可以尝试以下方式:
def bool_return():
    try:
        # 这里放可能会抛出异常的代码
        return True
    except:
        # 这里处理异常,例如打印错误信息
        return False

这样,如果try语句块中的代码成功执行,函数将返回True。如果发生异常,函数将执行except语句块并返回False。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-13 19:25:18 | 显示全部楼层
finally是一定会执行的语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-13 19:28:43 | 显示全部楼层
同问:
def func():
     try:
         print("heres try")
         return "try"
         print("try done")
     finally:
         print("finally")
         return "finally"
         print("finally done")

print("res:", func())
heres try
finally
res: finally
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-13 19:46:11 | 显示全部楼层

你这个和我的问题是一样的,isdkz解释了。就是说try里面的内容没有错,但是finally:的内容必须要执行,如果return 在 try里面被执行了,这个函数的调用就结束,不会执行finally里面的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表