首页 > 解决方案 > 为什么Flask中的错误“AttributeError:'NoneType'对象没有属性”有时会触发,而不是经常触发?

问题描述

构建一个 Flask 应用程序,并尝试按日期/受欢迎程度更改条目/卡片的选择。我被困在这里,因为这个错误不是恒定的,它偶尔会触发。我希望我能让这个排序功能正常工作然后解决这个问题,我认为这只是一个小错误。但是,现在错误更频繁地触发,我担心我只是将时间完全浪费在这种方法上;但我不知道。

应用程序.py

def tester(page):

    limit = 6
    offset = (int(page) - 1) * limit

    requested = request.args.get('fromHTMLchoice')
    print(requested)
    requestChoice = requested.split()
    a = requestChoice[0]
    b = requestChoice[1]
    convertChoice = tuple(a[2:-2], int(b[:-1]))

    sagas_pages = sagas.find().sort(
                        [convertChoice]).skip(offset).limit(limit)

    return render_template(
                "tester.html",
                sagas_pages=sagas_pages, page=page
                      )

HTML

<form class="form-inline" method="GET" action="{{url_for('tester', page=1)}}">
            <div class="form-group">
                <div class="input-group">
                    <span class="input-group-addon">Please select</span>
                        <select name="fromHTMLchoice" class="selectpicker form-control">
                            <option value= "('totalLikes', -1)">Likes</option>
                            <option value= "('totalLikes', 1)">Dislikes</option>
                            <option value= "('_id', -1)">Most_Recent</option>
                            <option value= "('_id', 1)">Least_Recent</option>
                        </select>
                </div>
                <button type="submit" class="btn btn-default">Go</button>
            </div>
        </form>

错误

None
127.0.0.1 - - [17/Jul/2020 18:07:40] "GET /tester/1 HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/workspace/.pip-modules/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/workspace/sagacity/app.py", line 94, in tester
    requestChoice = requested.split()
AttributeError: 'NoneType' object has no attribute 'split'

标签: pythonhtmlmongodbflaskpymongo

解决方案


那 AttributeError 是问题的下游。调试的问题是为什么

requested = request.args.get('fromHTMLchoice')
print(requested)

某人打印None,就像在日志顶部一样。安全的赌注是,不知何故,tester是通过没有fromHTMLChoice参数的 URL 调用的。


推荐阅读