即使代码有效,也会出现属性错误有关系吗?

问题描述

我正在调用函数属性以在Flask应用程序的while循环中更新变量,然后将响应中的数据发送至模板JS以更新css属性-这是在PyTube中更新进度条。 / p>

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

我的代码有效并且有效。

尽管我想遵循最佳实践并编写正确的代码,但在这种情况下,由于我找不到其他解决方案,因此可以解决此问题。

作为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>

解决方法

您收到的错误消息很简单。 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())
...

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