运行时引发异常运行tf.app.run()

2024-05-08 23:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在玩标志,在使用tf.app.run()时遇到了一些奇怪的行为。下面的代码片段应该只打印通过命令行给出的字符串。在

import tensorflow as tf

# command line flags
tf.app.flags.DEFINE_string('mystring', 'Hello World!',
                           '''String to print to console.''')

FLAGS = tf.app.flags.FLAGS


def main():

    print(FLAGS.mystring)

if __name__ == '__main__':
    tf.app.run()

在执行期间,将引发此错误:

Traceback (most recent call last):

File "", line 1, in runfile('/path/flags.py', wdir='/path')

File "/home/abc/anaconda3/envs/tensorflow/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", line 710, in runfile execfile(filename, namespace)

File "/home/abc/anaconda3/envs/tensorflow/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", line 101, in execfile exec(compile(f.read(), filename, 'exec'), namespace)

File "/path/flags.py", line 19, in tf.app.run()

File "/home/abc/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/platform/app.py", line 126, in run _sys.exit(main(argv))

TypeError: main() takes 0 positional arguments but 1 was given

…这很奇怪,因为我没有给main()一个参数。但是,如果我添加一个下划线def main(_):,它可以正常工作而不会出现任何错误。在

我找不到一个文档,其中描述了下划线的用法。有人知道这里发生了什么吗?谢谢您!在


Tags: pathruninpyapphomemaintf
3条回答

当我执行代码时,我在pycharmide中看到的错误消息更清晰。在

Traceback (most recent call last):
  File "D:/PycharmProjects/TensorFlow/self.py", line 30, in <module>
    tf.app.run()
  File "D:\\Anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\platform\app.py", 
line 48, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
TypeError: main() takes 0 positional arguments but 1 was given

_sys.exit(main(_sys.argv[:1] + flags_passthrough))正试图用一个参数调用我们的main方法。在

这是app.py中的run方法

一个精简版的运行方法可以用于测试。在

^{2}$

print(_sys.argv[1:])打印['D:/PycharmProjects/TensorFlow/self.py']自 argv[0]是传递给解释器的脚本名。在

也许您可以从这个链接找到解释app.py如何运行{a1}的答案

您也可以使用def main(argv=None): ...来定义主函数,或者像您一样使用def main(_): ...来定义主函数,这样就可以为您提供主函数参数了。在

我在使用cProfile和调用脚本时遇到了类似的问题

python -m cProfile train.py

看来问题是运行tf.app.run调用了cProfile内部的main,它还没有准备好传递参数。在我的例子中,解决方案是在tf.app.run()中指定main:

^{2}$

别忘了添加这个参数。在

相关问题 更多 >