在python控制台中重定向和抛出错误之前,Flask路由运行代码,但不在Flask调试中



我遇到了一个奇怪的问题,python终端正在抛出AttributeError: 'NoneType' object has no attribute 'find',但我在Flask调试控制台中没有收到任何错误,应用程序正常工作,没有任何问题。python控制台中的错误让我抓狂,我想了解发生了什么。

我的应用程序的布局如下。我呈现了一个主页,该主页通过html表单检索用户的输入,并获取该值,在本例中为股票行情,然后重定向到函数infoPage,股票行情用于执行一些网络抓取。

@app.route('/', methods=['GET', 'POST'])
def stockTickerInput():
if request.method == "POST":
ticker = request.form['ticker'].upper()
return redirect(url_for('infoPage', ticker=ticker))
return render_template('home.html')

出于某种原因,python在flask重定向到infoPage之前运行此代码。我知道这一点,因为一旦home.html被呈现,在用户以html形式输入股票行情之前,我就收到了错误AttributeError: 'NoneType' object has no attribute 'find'

@app.route('/<ticker>')
def infoPage(ticker):     
# scrapes stock chart/company info from finviz
def stockInfo():        
url = 'https://finviz.com/quote.ashx?t=' + ticker
html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(html.text, 'lxml')

# finds news table within finviz website
stock_website = soup.find('table', class_="fullview-title")
company_name = stock_website.find('a', class_='tab-link').text

return company_name

# functions to be passed as variables in jinja2 template
info = stockInfo()

return render_template('stockInfo.html', ticker=ticker, info=info)

回溯:

Traceback (most recent call last):
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflask_compat.py", line 39, in reraise
raise value
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflask_compat.py", line 39, in reraise
raise value
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:UsersJGrovAppDataLocalProgramsPythonPython38-32Libsite-packagesflaskapp.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:UsersJGrovGoogle DriveGitHubflask_stockinfoapp.py", line 149, in infoPage
info = stockInfo(ticker)
File "C:UsersJGrovGoogle DriveGitHubflask_stockinfoapp.py", line 42, in stockInfo
company_name = stock_website.find('a', class_='tab-link').text
AttributeError: 'NoneType' object has no attribute 'find'

如果能对为什么会发生这种情况有任何见解,我将不胜感激。

这部分:

if result is None:  # if result is none means ticker exists
return redirect(url_for('infoPage', ticker=ticker))

的代码执行,因为result从以下行获得值None:

result = match.find('h4').text

因此,在return render_template('stockInfo.html', ticker=ticker, info=info)运行之前激发return redirect(url_for('infoPage', ticker=ticker))

最新更新