【问题标题】:Passing string in flask在烧瓶中传递字符串
【发布时间】:2017-12-02 13:25:54
【问题描述】:

我有以下问题,似乎无法找到答案,尽管我认为它相当简单......

我正在尝试将 Python/flask 中的字符串从一个函数传递到另一个函数。 没有烧瓶,这可以工作并打印我的文本。

[...]
def sample(args):
    with open(os.path.join(args.save_dir, 'config.pkl'), 'rb') as f:
        saved_args = cPickle.load(f)
    with open(os.path.join(args.save_dir, 'chars_vocab.pkl'), 'rb') as f:
        chars, vocab = cPickle.load(f)
    model = Model(saved_args, training=False)
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        saver = tf.train.Saver(tf.global_variables())
        ckpt = tf.train.get_checkpoint_state(args.save_dir)
        if ckpt and ckpt.model_checkpoint_path:
            saver.restore(sess, ckpt.model_checkpoint_path)
            text = model.sample(sess, chars, vocab, args.n, args.prime,
                               args.sample).encode('utf-8')
            printer(text)

def printer(text):    
    print(text)

这工作正常并打印我的字符串。 如果我尝试实现烧瓶,我会在 127.0.0.1:5000/text 上收到内部服务器错误

def sample(args):
    with open(os.path.join(args.save_dir, 'config.pkl'), 'rb') as f:
        saved_args = cPickle.load(f)
    with open(os.path.join(args.save_dir, 'chars_vocab.pkl'), 'rb') as f:
        chars, vocab = cPickle.load(f)
    model = Model(saved_args, training=False)
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        saver = tf.train.Saver(tf.global_variables())
        ckpt = tf.train.get_checkpoint_state(args.save_dir)
        if ckpt and ckpt.model_checkpoint_path:
            saver.restore(sess, ckpt.model_checkpoint_path)
            text = model.sample(sess, chars, vocab, args.n, args.prime,
                               args.sample).encode('utf-8')
            printer(text)

@app.route('/text')
def printer(text):    
    return(text)

如果我只是尝试显示一些文本而不传递字符串,它可以正常工作。

我对 python 和烧瓶完全陌生,如果能提供任何帮助,我将不胜感激!

这是来自终端的 Traceback:

 [2017-12-02 15:47:06,244] ERROR in app: Exception on /text [GET]
Traceback (most recent call last):
  File "/Users/marcel/tensorflow/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/marcel/tensorflow/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/marcel/tensorflow/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/marcel/tensorflow/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/Users/marcel/tensorflow/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/marcel/tensorflow/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
TypeError: printer() missing 1 required positional argument: 'text'

【问题讨论】:

  • 您能否发布整个回溯(作为对您问题的编辑)。谢谢!

标签: python string flask parameter-passing


【解决方案1】:

查看运行烧瓶应用程序的终端的控制台输出。 它应该有带有调试细节的堆栈跟踪, 可能以这样的一行结尾:

TypeError: printer() missing 1 required positional argument: 'text'

问题是用@app.route 装饰的函数是在没有参数的情况下调用的,但是您定义的printer 函数却需要一个。您需要使函数无参数:

@app.route('/text')
def printer():    
    # ...

您需要更改它的实现,以便它返回一个有效的Response 对象。 有关示例,请参阅documentation

【讨论】:

  • 是的,你是对的,这就是确切的错误。我正在调查 Response 对象。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2021-05-21
  • 1970-01-01
  • 2016-05-14
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多