[英]Is creating a variable in try/except block considered a bad practice?
[英]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.