You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask表单验证报错:TypeError: 'Length' object is not iterable

Flask表单验证报错:'Length'对象不可迭代

错误信息

实现Flask表单验证时触发如下错误:
for validator in validators: TypeError: 'Length' object is not iterable

问题代码

from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import Length

class RegisterForm(FlaskForm):
       username=StringField(label='User Name',validators=Length(2,30))
       email_address=StringField(label='E-mail')
       password1=PasswordField(label='Password')
       password2=PasswordField(label='Confirm Password')
       submit=SubmitField(label='Create Account')

完整错误日志

C:\Users\navee\AppData\Local\Programs\Python\Python310\lib\site-packages\flask_sqlalchemy_init_.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
warnings.warn(FSADeprecationWarning(
Traceback (most recent call last):
File "C:\Users\navee\Desktop\sikander\Coding\Python\Flaskmarket\run.py", line 1, in
from market import app
File "C:\Users\navee\Desktop\sikander\Coding\Python\Flaskmarket\market_init_.py", line 9, in
from market import routes
File "C:\Users\navee\Desktop\sikander\Coding\Python\Flaskmarket\market\routes.py", line 4, in
from market.forms import RegisterForm
File "C:\Users\navee\Desktop\sikander\Coding\Python\Flaskmarket\market\forms.py", line 5, in
class RegisterForm(FlaskForm):
File "C:\Users\navee\Desktop\sikander\Coding\Python\Flaskmarket\market\forms.py", line 6, in RegisterForm
username=StringField(label='User Name',validators=Length(2,30))
File "C:\Users\navee\AppData\Local\Programs\Python\Python310\lib\site-packages\wtforms\fields\core.py", line 33, in new
return UnboundField(cls, *args, **kwargs)
File "C:\Users\navee\AppData\Local\Programs\Python\Python310\lib\site-packages\wtforms\fields\core.py", line 384, in init
self.field_class.check_validators(validators)
File "C:\Users\navee\AppData\Local\Programs\Python\Python310\lib\site-packages\wtforms\fields\core.py", line 177, in check_validators
for validator in validators:
TypeError: 'Length' object is not iterable

解决方法

1. 修正validators参数格式

WTForms的validators参数要求传入可迭代对象(通常是列表),直接传入单个Length实例会导致遍历验证器时报错。修改代码,将Length(2,30)放入列表中:

from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import Length

class RegisterForm(FlaskForm):
       # 改为列表形式传入验证器
       username=StringField(label='User Name',validators=[Length(2,30)])
       email_address=StringField(label='E-mail')
       password1=PasswordField(label='Password')
       password2=PasswordField(label='Confirm Password')
       submit=SubmitField(label='Create Account')

2. 消除SQLAlchemy警告

错误日志中的FSADeprecationWarning是因为未配置SQLALCHEMY_TRACK_MODIFICATIONS,在Flask应用配置中添加以下代码即可消除:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

内容的提问来源于stack exchange,提问作者Muhammad Sikandar Subhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:25:53