猿问

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

来自基于 Java 和 C 的语言,这在 Python 中看起来很奇怪。该x变量在 try 块中定义,但在其外部使用。


我知道 python 不限定 try 块。


try:

    x = 5

except Exception as e:

    print(str(e))


print(f"x = {x}")

这是否被认为是 Python 中的好形式,还是更喜欢x = None预先设置?还是第三种选择?为什么?


www说
浏览 344回答 2
2回答

慕桂英3389331

在极少数情况下, atry: / except:确实是合适的做法。显然,您给出的示例是抽象的,但在我看来,答案是“不”,引用可能未声明的变量并不是一种好形式-如果由于某种原因在try:before 中遇到错误x = 5,那么您将得到尝试时出错print(f"x = {x}")。更重要的是,为什么哦为什么要在 try 块中分配变量?我想说一个好的经验法则是只包含在try您实际测试异常的那部分代码中。旁注:之前我曾被告知使用 a 是不好的形式except Exception,因为您真正应该做的是处理某个type错误,或者更好的particular错误(例如except IndexError,这将导致所有其他类型的错误都无法处理) ...try / except如果非专门使用,很容易引入难以诊断的错误。我很确定except:并且except Exception是等效的。

MMMHUHU

在这样的情况下,如果在异常之后有一个共同的执行路径,我通常会做这样的事情(就if/else变量赋值而言,它有一定的-ish接触):try:&nbsp; &nbsp; price = get_min_price(product)except Exception as ex:&nbsp; &nbsp; print("could not get price for product {}: {}".format(product, ex))&nbsp; &nbsp; price = 1000000.0print(f"price = {price}")if price <= min_price:&nbsp; &nbsp; send_price_alert(user, product, price)然而,通常情况下,我以这样一种方式构建我的代码:无论在try块中填充什么变量,我都不会在except块之后使用:try:&nbsp; &nbsp; price = get_min_price(product)&nbsp; &nbsp; print(f"price = {price}")&nbsp; &nbsp; if price <= min_price:&nbsp; &nbsp; &nbsp; &nbsp; send_price_alert(user, product, price)except Exception as ex:&nbsp; &nbsp; print("could not get price for product {}: {}".format(product, ex))此处,price不在except关键字之后使用,因此无需初始化。
随时随地看视频慕课网APP

相关分类

Python
我要回答