2014-05-17 63 views
1

編輯:我發現了什麼導致了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__' 
+0

請提供完整的錯誤跟蹤。 –

+0

我修改了我的文章 – Nephie

回答

3

也許,有一個在您Records表中沒有的元素。因此,cur.fetchone()返回None,所以你有效地試圖訪問None[0],因此錯誤消息。

順便把錯誤信息告訴你,你拿的東西是None,所以如果你看行[0],你正在做的[0]的唯一事情是number。所以調試這些問題的一個好方法是在違規行之前添加如print number,這常常會挑戰我對變量內容的一些基本認識:)

+0

你說得對。不知何故,我從數據庫中的數據被刪除,我指的是不存在的東西 – Nephie

相關問題