【问题标题】:UnboundLocalError: local variable 'photo' referenced before assignmentUnboundLocalError:分配前引用的局部变量“照片”
【发布时间】:2020-07-19 11:39:46
【问题描述】:

每次我发布没有图片的新帖子时,我都会收到该错误。如何做到这一点,我只能发布带有图像的文本或/和文本。提前致谢!

我的帖子

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(title=form.title.data, content=form.content.data, image=photo ,author=current_user) UnboundLocalError:分配前引用的局部变量“照片”

【问题讨论】:

  • 我可以猜到如果 form.photo.data 不是 True 那么变量 photo 没有被初始化。你必须在之后添加一个 else 语句来初始化变量或者只是打破循环

标签: python flask sqlalchemy jinja2 flask-wtforms


【解决方案1】:

问题是您的变量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)

【讨论】:

  • “非常感谢你!它炒起来了兄弟”
  • 如果对您有帮助,请接受答案,以帮助其他遇到相同问题的开发人员。
  • "是的,我会这样做"
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 2020-01-16
      • 2019-12-05
      • 2017-09-19
      • 2020-09-26
      • 2022-01-02
      • 2019-03-22
      • 2019-01-24
      • 2021-07-01
      相关资源
      最近更新 更多