首页 > 解决方案 > 即使代码有效,属性错误。有关系吗?

问题描述

我正在调用一个函数属性来更新我的 Flask 应用程序中的 while 循环中的变量,然后将数据发送到我的模板 JS 以更新 css 属性 - 这是为了更新 PyTube 中的进度条。

我收到'AttributeError:'function'对象在Powershell中没有属性'完成百分比'。

我的代码可以正常工作并且可以正常工作。

尽管我想遵循最佳实践并编写正确的代码,但在这种情况下,这是一种解决方法,因为我找不到任何其他解决方案。

作为 Python 和 Flask 的新手,我想知道这个错误是否重要,如果是,它会有什么负面影响?

功能

def on_progress(stream, chunk, bytes_remaining):
    total_size = stream.filesize
    bytes_downloaded = total_size - bytes_remaining
    on_progress.percentage_of_completion = bytes_downloaded / total_size * 100

包含 while 循环的路由

@app.route('/progress')
def progress():
    def generate():

        x = 0

        while x <= 100:
            x = round(on_progress.percentage_of_completion)
            yield "data:" + str(x) + "\n\n"
            time.sleep(0.1)



    return Response(generate(), mimetype= 'text/event-stream')

模板 JS

var source = new EventSource("/progress");
source.onmessage = function(event) {
    $('.progress-bar').css('width', event.data+'%').attr('aria-valuenow', event.data);
    $('.progress-bar-label').text(event.data+'%');

    if(event.data == 100){
        source.close()
    }
}

模板 CSS

<div class="progress" style="width: 50%; margin: 50px;">
     <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
                <span class="progress-bar-label">0%</span>
     </div>
</div>

标签: javascriptpythonattributeerrorevent-stream

解决方案


您收到的错误消息很简单。实体是一个函数,on_progress没有percentage_of_completion属性。

您可能想要做的是更改您的函数,以便它返回完成百分比:

def on_progress(stream, chunk, bytes_remaining):
    total_size = stream.filesize
    bytes_downloaded = total_size - bytes_remaining
    
    return bytes_downloaded / total_size * 100

然后正确使用它,作为函数调用:

...
    while x <= 100:
        x = round(on_progress())
...

请注意,我还没有阅读您的其余代码,您可能还有一些我没有考虑到的其他问题。


推荐阅读