UnboundLocalError: local variable 'photo' referenced before assignment

UnboundLocalError: local variable 'photo' referenced before assignment

每次我 post 新的 post 没有图像时我都会得到那个错误。如何才能让我只能 post 文本 or/and 带图像的文本。提前致谢!

我的Post表格

class PostForm(FlaskForm):
    title    = StringField('Title', validators=[DataRequired()])
    content  = TextAreaField('Content', validators=[DataRequired()])
    photo    = FileField('Image to post', validators=[FileAllowed(['jpg', 'png'])])
    submit = SubmitField('POST')

我的路线

   @app.route('/post/new', methods=['GET', 'POST'])
   def new_post():
      form = PostForm()
      if form.validate_on_submit():
         if form.photo.data:
            photo = save_photo(form.photo.data)
         post = Post(title=form.title.data, content=form.content.data, image=photo ,author=current_user)    
         db.session.add(post) 
         db.session.commit()
        ......

当我点击 POST 按钮时从服务器收到错误 post = Post(标题=form.title.data, 内容=form.content.data, 图片=照片,作者=current_user) UnboundLocalError:赋值前引用的局部变量'photo'

变量 photo 是有条件分配的,所以如果 form.photo.data 是假的,那么变量 photo 将不存在,但尝试使用它的行仍将被执行。

您可能应该将使用变量的代码移动到同一个 if 块中。

问题是您的变量 photo 是在 if 块内定义的,如果您的 if 条件是 False,它将不会被定义.

请尝试:

photo = None # put here any default value
if form.photo.data:
    photo = save_photo(form.photo.data)
post = Post(title=form.title.data, content=form.content.data, image=photo ,author=current_user)

语句 if form.photo.data 不为真,因此变量 photo 未初始化。你必须在那之后添加一个 else 语句来初始化 photo 变量或者只是中断循环。