繁体   English   中英

使用“ try”来查看是否定义了变量是否被认为是Python中的不良做法?

[英]Is using “try” to see if a variable is defined considered bad practice in Python?

我在函数内有以下代码:

try:
    PLACES.append(self.name)
except NameError:
    global PLACES
    PLACES = [self.name]

这导致from <file containing that code> import *返回

SyntaxWarning: name 'PLACES' is used prior to global declaration
  global PLACES

所以我想知道这样做是否被认为是不好的做法,如果是,那么正确的做法是什么? 我是一个菜鸟。

是的,这被认为是不好的做法。 只要确保定义了变量即可。 实际上,这就像具有合理默认值的模块级分配一样简单:

Places = []

如果不应在导入时实例化默认值(例如,如果它非常昂贵或有一些副作用),则可以至少初始化None并在需要时检查the_thing is None是否the_thing is None ,如果仍然为None则对其进行初始化。

第一个问题是您不应该from foo import * ,这只是一种不好的做法,并且会导致名称空间冲突(顺便说一下,没有任何警告),并且稍后会令您头疼。

如果需要在两个模块之间共享全局存储空间; 考虑腌制物体并在需要时将其解酸; 或ak / v存储,缓存或其他外部存储。 如果您需要存储丰富的数据,则数据库可能是理想的选择。

检查名称是否指向对象通常是某处设计不良的标志。 如果不存在名称,您也不应假定污染全局名称空间-您如何知道未故意删除PLACES

我只建议您将全局PLACES移出“ except”块:

global PLACES
try:
    PLACES.append(self.name)
except NameError:
    PLACES = [self.name]

只需定义:

PLACES = []

首先。

后来:

PLACE.append(self.name)

如果选中

if PLACES:

空列表将产生false。 这样,您就可以知道那里是否已经有任何地方。 当然,您在追加之前无需检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM