为了账号安全,请及时绑定邮箱和手机立即绑定

Python - 在 try/catch 之前定义变量还是让它们冒泡?

Python - 在 try/catch 之前定义变量还是让它们冒泡?

www说 2021-08-17 18:35:58
来自基于 Java 和 C 的语言,这在 Python 中看起来很奇怪。该x变量在 try 块中定义,但在其外部使用。我知道 python 不限定 try 块。try:    x = 5except Exception as e:    print(str(e))print(f"x = {x}")这是否被认为是 Python 中的好形式,还是更喜欢x = None预先设置?还是第三种选择?为什么?
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

在极少数情况下, atry: / except:确实是合适的做法。显然,您给出的示例是抽象的,但在我看来,答案是“不”,引用可能未声明的变量并不是一种好形式-如果由于某种原因在try:before 中遇到错误x = 5,那么您将得到尝试时出错print(f"x = {x}")

更重要的是,为什么哦为什么要在 try 块中分配变量?我想说一个好的经验法则是只包含在try您实际测试异常的那部分代码中

旁注:

  • 之前我曾被告知使用 a 是不好的形式except Exception,因为您真正应该做的是处理某个type错误,或者更好的particular错误(例如except IndexError,这将导致所有其他类型的错误都无法处理) ...try / except如果非专门使用,很容易引入难以诊断的错误。

  • 我很确定except:并且except Exception是等效的。


查看完整回答
反对 回复 2021-08-17
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

在这样的情况下,如果在异常之后有一个共同的执行路径,我通常会做这样的事情(就if/else变量赋值而言,它有一定的-ish接触):


try:

    price = get_min_price(product)

except Exception as ex:

    print("could not get price for product {}: {}".format(product, ex))

    price = 1000000.0

print(f"price = {price}")

if price <= min_price:

    send_price_alert(user, product, price)

然而,通常情况下,我以这样一种方式构建我的代码:无论在try块中填充什么变量,我都不会在except块之后使用:


try:

    price = get_min_price(product)

    print(f"price = {price}")

    if price <= min_price:

        send_price_alert(user, product, price)

except Exception as ex:

    print("could not get price for product {}: {}".format(product, ex))

此处,price不在except关键字之后使用,因此无需初始化。


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号