You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python try块使用位置是否正确?Treehouse任务报错求助

你的try块位置确实不正确,问题出在这里

首先,你现在把整个函数定义都包裹在了try块里,这完全不符合平台提示的“在将参数转换为float之前添加try块”的要求。函数定义本身不会抛出ValueError,只有当你执行float(num1)或float(num2)这种转换操作时,才可能因为参数无法转为浮点数触发异常。

另外,你的代码还有两个严重问题:

  • else块里调用add(num1, num2)会导致无限递归——每次进入else都会再次调用函数本身,最终会栈溢出报错。
  • 函数定义被放在try块内,这在Python里虽然语法合法,但逻辑上完全错误,因为try应该包裹的是可能抛出异常的执行代码,而不是定义代码。

正确的写法应该是这样:

把try-except放在函数内部,只包裹转换和计算的部分:

def add(num1, num2):
    try:
        # 把可能抛出ValueError的转换操作放在try里
        return float(num1) + float(num2)
    except ValueError:
        # 转换失败时返回None
        return None

为什么这样正确?

  1. 当调用add函数时,try块内会尝试把两个参数转为浮点数并相加,如果转换成功(比如参数是合法的数字字符串或数值),就直接返回结果。
  2. 如果参数无法转为浮点数(比如传入"abc"这种非数字字符串),就会触发ValueError,进入except块返回None。
  3. 不需要额外的else块,因为try里的return会直接结束函数,只有当try块里没有触发异常且没有提前返回时,才会执行else——这里完全没必要。

这样修改后,既符合平台要求的“在转换前加try块”,也解决了递归和逻辑错误的问题,应该就能通过任务了。

内容的提问来源于stack exchange,提问作者user9589034

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:37:44