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
为什么这样正确?
- 当调用
add函数时,try块内会尝试把两个参数转为浮点数并相加,如果转换成功(比如参数是合法的数字字符串或数值),就直接返回结果。 - 如果参数无法转为浮点数(比如传入"abc"这种非数字字符串),就会触发
ValueError,进入except块返回None。 - 不需要额外的
else块,因为try里的return会直接结束函数,只有当try块里没有触发异常且没有提前返回时,才会执行else——这里完全没必要。
这样修改后,既符合平台要求的“在转换前加try块”,也解决了递归和逻辑错误的问题,应该就能通过任务了。
内容的提问来源于stack exchange,提问作者user9589034
相关产品推荐
相关产品推荐

