編輯:我發現了什麼導致了NoneType錯誤,對不起打擾你。TypeError:'NoneType'對象在Flask中使用SQLite3沒有屬性'__getitem__'
在我的代碼中,我想打開我的records.db並獲取其中的最後一個索引,然後使用此索引作爲上傳文件的名稱(增加一個),但我的方法只適用於普通的python腳本,在Flask i得到NoneType錯誤..
這裏是我的代碼:
import os
import datetime
import subprocess
import sqlite3
import sys
from flask import Flask, render_template, request, redirect, url_for, g
from werkzeug import secure_filename
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'gro', 'doc', 'docx'])
DATABASE = 'records.db'
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS']
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
def get_id():
cur = get_db().cursor()
cur.execute('SELECT id FROM Records ORDER BY id DESC LIMIT 1;')
number = cur.fetchone()
filenum = int(number[0])
return filenum + 1
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods = ['POST'])
def upload():
num = get_id()
file = request.files['file']
if file and allowed_file(file.filename):
file.save(os.path.join(app.config['UPLOAD_FOLDER'], num.filename))
subprocess.call(['python', '/home/martyna/Dropbox/programowanie/project_firefox/topologia.py', 'uploads/'+num.filename])
return "Thank you for uploading"
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0')
這:filenum = int(number[0])
導致我的錯誤。我將不勝感激任何幫助。
完整的錯誤跟蹤:
Traceback (most recent call last):
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/martyna/Dropbox/programowanie/project_firefox/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/martyna/Dropbox/programowanie/project_firefox/hello.py", line 46, in upload
filenum = int(number[0]) + 1
TypeError: 'NoneType' object has no attribute '__getitem__'
請提供完整的錯誤跟蹤。 –
我修改了我的文章 – Nephie