【发布时间】:2014-01-15 17:15:26
【问题描述】:
我最近在我们的代码中遇到了很多这样的事情
...
globals()['machine'] = otherlib.Machine()
globals()['logger'] = otherlib.getLogger()
globals()['logfile'] = datetime.datetime.now().strftim('logfiles_%Y_%m_%d.log')
我有点困惑为什么人们会这样做,而不是这样做
global machine
machine = otherlib.Machine()
等等。
这是一个稍微匿名的函数,它完整地执行此操作:
def openlog(num)
log_file = '/log_dir/thisprogram.' + num
if os.path.exists(log_file):
os.rename(log_file, log_file + '.old')
try:
globals()["log"] = open(log_file, 'w')
return log
except:
print 'Unable to open ' + log_file
sys.exit(1)
它把 pylint (0.25) 和我都搞糊涂了。
有什么理由这样编码吗?我们的代码中很少使用 eval,而且它不在库中
PS 我检查了Reason for globals() in python,但它并没有真正回答为什么你会使用它来设置程序中的全局变量
【问题讨论】:
-
通常你不会......除非你正在编写脚本并且你将它们作为字符串......然后你将不得不(或想出一个更好的方法来从字符串创建变量(有很多更好的方法恕我直言))...
-
你为什么要问我们?你为什么不问问写代码的人?!
-
一行而不是两行? (我知道这不是一个好理由,但这可能是原因)
-
哎呀我的眼睛...鉴于 SquareWheeled(tm) 对
logging.RotatingFileHandler的重新发明以及完全脑残的异常处理方案,我怀疑这仅仅是出于无能。