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 状态。
这个错误让我抓狂。我正在尝试使用 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 状态。