【问题标题】:Attribute error even though code works. Does it matter?即使代码有效,属性错误。有关系吗?
【发布时间】:2020-11-11 21:38:39
【问题描述】:

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

我在 Powershell 中收到 'AttributeError: 'function' object has no attribute 'percentage of completion'。

我的代码工作正常。

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

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

【问题讨论】:

    标签: javascript python attributeerror event-stream


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的意见。我的 on_progress 函数是一个回调函数,它接受 3 个参数,但是这些参数是通过 PyTube 包传递的(我相信),因此我收到...'缺少 3 个必需的位置参数:'stream'、'chunk' 和'字节剩余'。在用适当的术语解释事情时,我有点超出了我的舒适区,所以我希望我做对了,而且这是有道理的。仍然对这方面的决议持开放态度!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2017-12-30
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多