0

我正在尝试在我的 python 代码中使用 glog,当我尝试导入时,它会引发以下错误:

/usr/local/lib/python2.7/dist-packages/glog.py:171: RuntimeWarning: 
Trying to access flag verbosity before flags were parsed. This will raise 
an exception in the future. 
setLevel(FLAGS.verbosity)
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/glog.py", line 171, in 
<module>
setLevel(FLAGS.verbosity)
File "/usr/local/lib/python2.7/dist-packages/gflags/flagvalues.py", line 
390, in __getattr__
traceback.print_stack()
E0602 09:45:07.674463 4695 flagvalues.py:399] Trying to access flag 
verbosity before flags were parsed.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gflags/flagvalues.py", line 
391, in __getattr__
raise exceptions.UnparsedFlagAccessError(error_message)
UnparsedFlagAccessError: Trying to access flag verbosity before
flags were parsed.

我的代码如下。

import gflags 
import glog as log

我在网上搜索过,但没有任何关于 glog 的 python 版本的信息。我认为这个错误必须与 gflags 和 glog 一起做。谁能解释一下出了什么问题?

4

1 回答 1

1

我有同样的问题。检查代码后,似乎是某种 glog 的错误。

import glog被拦截时,它假设gflags.GFLAGS已经启动,并尝试读取gflags.GFLAGS.verbosity,实际上在大多数情况下并不能保证被初始化。

例如,下面的代码会抛出异常:

import gflags
import glog
import sys

if __name__ == "__main__":
    gflags.FLAGS(sys.argv)
    # do something.

因为whenimport glog被拦截,所以读取FLAGS.vebosity,但是因为glfags.FLAGS(sys.argv)还没有执行,所以读取FLAGS失败。

所以我们必须确保在初始化后被import gflags拦截GFLAGS,我能想到的唯一解决方案是放入import glog另一个文件而不是主 py 脚本。

例如,在主脚本中:

import gflags
import sys
# DON'T IMPORT ANYTHING that evolves of 'glog' 

FLAGS = gflags.FLAGS

if __name__ == "__main__":
    argv = FLAGS(sys.argv)
    # import any modle that uses 'glog'
    import your_other_module
    your_other_module.do_something()    
于 2016-08-10T21:16:35.953 回答