【问题标题】:UnboundLocalError: local variable 'filename' referenced before assignmentUnboundLocalError:分配前引用的局部变量“文件名”
【发布时间】:2016-02-08 11:06:15
【问题描述】:

我正在尝试获取文件名并显示列表,我遇到以下错误,UnboundLocalError: local variable 'filename' referenced before assignment

这是代码,我正在处理,似乎循环设置不正确。

@media.route('/uploadajax', methods=['POST'])
def upldfile():
    if request.method == 'POST':
        files = request.files.getlist('file[]')
        for f in files:
            if f and allowed_file(f.filename):
                filename = secure_filename(f.filename)
                updir = os.path.join(basedir, 'upload/')
                f.save(os.path.join(updir, filename))
                file_size = os.path.getsize(os.path.join(updir, filename))
            else:
                app.logger.info('ext name error')
                return jsonify(error='ext name error')
        return jsonify(name=filename, size=file_size)

如何解决循环问题?

【问题讨论】:

  • files 列表中没有项目时出现该问题

标签: python flask flask-sqlalchemy flask-wtforms


【解决方案1】:

for 循环之前添加以下行将解决您的问题:

files = request.files.getlist('file[]')
if not files:
    return jsonify(error='Please add files')
for f in files:
    # for loop body

【讨论】:

    【解决方案2】:

    正如@Andriy Ivaneyko 的回答所见,问题是您可能在这里有一个空的文件列表。您可以创建一个包含验证结果的列表,以在前端启用详细的错误报告。

    @media.route('/uploadajax', methods=['POST'])
    def upldfile():
        if request.method == 'POST':
            files = request.files.getlist('file[]')
            my_json_stuff = []
            for f in files:
                if f and allowed_file(f.filename):
                    filename = secure_filename(f.filename)
                    updir = os.path.join(basedir, 'upload/')
                    f.save(os.path.join(updir, filename))
                    file_size = os.path.getsize(os.path.join(updir, filename))
                    my_json_stuff.append({'name': filename, 'size': file_size})
                else:
                    app.logger.info('ext name error')
                    my_json_stuff.append({'error': 'ext name error'})
    
            return jsonify(my_json_stuff)
    

    【讨论】:

    • 如果allowed_file return false return jsonify(error='ext name error') 会被执行,当文件是假的并且循环体没有被执行时,会丢失对大小写的处理问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2020-01-16
    • 2019-12-05
    • 2017-09-19
    • 2020-09-26
    • 2022-01-02
    相关资源
    最近更新 更多