【问题标题】:"TypeError": 'list' object is not callable flask“TypeError”:“列表”对象不是可调用的烧瓶
【发布时间】:2014-12-22 19:12:46
【问题描述】:

我正在尝试使用烧瓶在浏览器中显示已连接设备的列表。我在端口 8000 上启用了烧瓶:

在 server.py 中:

@server.route('/devices',methods = ['GET'])
def status(): 
    return app.stat()

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

在 app.py 中:

def stat():
    return(glob.glob("/dev/tty57") + glob.glob("/dev/tty9"))

这是我的测试:

url = "http://127.0.0.1:8000"

response = requests.get(url + "").text
print response

但我不断收到此错误:

"TypeError": 'list' object is not callable.

我在检查 ttyUSB、... 和其他设备是否存在时做错了什么?

【问题讨论】:

  • 哪一行出现错误?
  • 是否缺少代码或为什么在 app.py 中导入了请求和序列?
  • 浏览器返回“内部服务器错误”。当我使用“gunicorn server:server -b 0.0.0.0:8000”命令时,我看到了错误。在 app.py 中,当我更改 glob.glob ...返回“测试结果”时,一切正常。
  • 鉴于 Flask 允许单页应用程序,为什么要拆分成多个文件呢?即使在没有 Flask 的情况下根本无法完成复制器(如果可以在没有 Flask 的情况下进行复制,应该在没有 Flask 的情况下进行复制——参见stackoverflow.com/help/mcve),它仍然应该能够仅作为一个文件,以便使用相同的行号更轻松地复制(因为您应该向我们展示带有行号的堆栈跟踪)。
  • 感谢查尔斯的评论。我想稍后添加多个端点并在不同的目录中运行多个测试,这就是我将所有内容放在单独的文件中的原因。

标签: python flask


【解决方案1】:

问题是您的端点正在返回一个列表。 Flask 只喜欢某些返回类型。这两个可能是最常见的

  • Response 对象
  • str(与 Python 2.x 中的 unicode 一起)

您还可以返回任何可调用对象,例如函数。

如果您想返回设备列表,您有几个选择。您可以将列表作为字符串返回

@server.route('/devices')
def status():
    return ','.join(app.statusOfDevices())

或者如果您希望能够将每个设备视为单独的值,您可以返回 JSON 响应

from flask.json import jsonify

@server.route('/devices')
def status():
    return jsonify({'devices': app.statusOfDevices()})
    # an alternative with a complete Response object
    # return flask.Response(jsonify({'devices': app.statusOfDevices()}), mimetype='application/json')

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多