python 中无法解释的 TypeError,回溯中不包含我的任何代码

Inexplicable TypeError in python that does not contain any of my code in the traceback

这个错误让我抓狂。我正在尝试使用 Flask 在 python 中创建网站的后端。我收到以下错误和回溯:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request
    response = self.make_response(rv)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1577, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 827, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/test.py", line 855, in run_wsgi_app
    app_iter = app(environ, start_response)
TypeError: 'int' object is not callable

奇怪的是,回溯不包含我的任何文件,所以我不知道是什么原因造成的,也不知道如何修复它。

下面是我写的相关方法:

@app.route('/notes/<filenum>', methods=['GET', 'POST'])
def view(filenum):
    if request.method == 'GET':
        pass
    else:
        if 'username' in session:
            if request.values['fnct'] == "delete":
                asdf = database.delNote(filenum,session['username'])
                return asdf
            return "invalid command"
        else:
            return "not logged in"

def delNote(self, noteid,username):
    try:
        if self.getPost(noteid)[7] == self.usernameToID(username):
            for file in glob.glob('uploads/' + str(noteid)+"-*"):
                os.remove(file)
            self._execute('DELETE FROM Posts where postID=?',(noteid,))
            return 1
        else:
            return -2 #autherror
    except IndexError:
        return -1 #note does not exist

当我调用 delNote() 时,它运行得非常完美,没有任何错误。当我 运行 view(filenum) 调用 delNote() 的行被注释掉时,它可以完美无误地工作。当我从视图中调用 delNote 时,出现上述错误。

似乎尽管有错误,该函数确实完成了它的预期任务。使用 print 语句,我找出了错误之前的整个 view() 运行s,但错误是在 return asdf 行之前抛出的 运行。有人可以向我解释这是怎么回事吗,因为我正在抵制越来越多的将我的电脑扔出 window.

的诱惑。

提前致谢

查看您的视图程序,我看到以下内容:

asdf = database.delNote(filenum,session['username'])

delNote 方法中没有 return 值,因此您将 None 分配给 asdf。我不熟悉 Flask,但它可能正在做一些它最终无法处理的具有价值的事情。你得到的关于 int 不可调用的错误是有道理的,因为 None 可以被强制为整数 0。没有必要将你的 delNote 分配给任何东西。试试这个,看看它是否有所作为:

database.delNote(filenum, session['username'])
return "Note deleted."

简短的回答是,您 return 从您的控制器中输入一个整数,而 Flask 不支持它。

相关文档如下:

http://flask.pocoo.org/docs/0.10/api/#flask.Flask.make_response

控制器必须 return 响应对象或字符串(或其他一些专门的东西)。你不能 return 整数,它们不起作用。该错误是因为 Flask 无法弄清楚如何处理它,所以它假设它是可调用的,而整数不是可调用的。

解决您的问题的 hacktaculuar 方法只是 return str(asdf),但不要那样做。看起来您正在尝试显示错误代码,因此您几乎肯定想改用 Flask abort() 函数和 return 适当的 HTTP 状态。