Max Max - 1 year ago 216
Python Question

Flask self.errors.append() - AttributeError: 'tuple' object has no attribute 'append'

My small registration app gives and error when I try to validate the submited data by user and check if the entered e-mail exists.

here is my files:


from import Form
from wtforms import TextField, BooleanField, PasswordField, TextAreaField, validators
from wtforms.validators import Required
from app import models

class RegisterForm(Form):
"""RegisterForm class needed for retrieving data from user"""
username = TextField('username', [validators.Length(min=3, max=50), validators.Required()])
email = TextField('email', [validators.Length(min=3, max=100), validators.Required()])
password = PasswordField('password', [validators.Required()])
age = TextField('age', [validators.Length(min=1, max=3), validators.Required()])
about_user = TextAreaField('about_user', [validators.Length(max=500)])
img_url = TextField('img_url')

def email_unique(self, email):
if models.User.query.filter_by(email = email).first() != None:'This E-mail address is already in use. Please choose another one.')
return False


from app import app, db, lm
from flask import render_template, url_for, flash, g, redirect, session, request
from flask.ext.login import login_user, logout_user, current_user, login_required
from forms import LoginForm, RegisterForm, EditForm
from models import User

@app.route('/register', methods = ['GET', 'POST'])
def register():
form = RegisterForm()
#makes the username unique
u_unique =
u_unique = User.unique_username(u_unique)

#validates email adress and checks if it already exists or not

if form.validate_on_submit():
user = User(
flash('Thank you for your registration')
flash('Your username is: ' + str(u_unique))
return redirect(url_for('login'))
for error in form.errors:

return render_template('register.html',
title = 'Registeration',
form = form)

The error is:

Traceback (most recent call last) File <br> "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/", line 1701, in __call__ return self.wsgi_app(environ, start_response)
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/", line 1689, in wsgi_app response = self.make_response(self.handle_exception(e))
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/", line 1687, in wsgi_app response = self.full_dispatch_request()
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/", line 1360, in full_dispatch_request rv = self.handle_user_exception(e)
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/", line 1358, in full_dispatch_request rv = self.dispatch_request()
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/", line 1344, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args)
File "/home/maksad/Desktop/faskMonkey/app/", line 92, in register form.email_unique(
File "/home/maksad/Desktop/faskMonkey/app/", line 26, in email_unique'This E-mail address is already in use. Please choose another one.')
AttributeError: 'tuple' object has no attribute 'append'

Answer Source

The tuple objects cannot append. Instead, convert to a list using list(), and append, and then convert back, as such:

>>> obj1 = (6, 1, 2, 6, 3)
>>> obj2 = list(obj1) #Convert to list
>>> obj2.append(8)
>>> print obj2
[6, 1, 2, 6, 3, 8]
>>> obj1 = tuple(obj2) #Convert back to tuple
>>> print obj1
(6, 1, 2, 6, 3, 8)

Hope this helps!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download