python - UnboundLocalError:在服务器端分配之前引用了局部变量“插入”
问题描述
我已经构建了一个关键字研究应用程序,它在本地服务器上成功运行,但是当我将它部署到Cpanel
它时,我抛出了一个错误:
UnboundLocalError:分配前引用的局部变量“插入”:
我该如何解决这个问题?
这是我的代码:
def funcurlscrpping(url):
urldata = requests.get(url)
soup = BeautifulSoup(urldata.content, "html")
title = soup.title.string
print ('TITLE IS :', title)
meta = soup.find_all('meta')
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['keywords']:
insert = tag.attrs['content']
print(insert)
data = insert.split(',')
return data
def funcurlscrppingwithkeyword(ids):
for id in ids:
videourl= 'https://www.youtube.com/watch?v='+ id
urldata = requests.get(videourl)
soup = BeautifulSoup(urldata.content, "html")
title = soup.title.string
print ('TITLE IS :', title)
meta = soup.find_all('meta')
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['keywords']:
insert1 = tag.attrs['content']
print(insert1)
data1 = insert1.split(',')
return data1
def GetTags(request):
if request.method == 'GET':
url = request.GET['query']
type = request.GET['type']
valid=validators.url(url)
if valid==True:
obj1=[]
obj1 = funcurlscrpping(url)
if type == 'YouTube':
return JsonResponse({"tags": obj1}, status=200)
else:
res = ['#' + x for x in obj1]
return JsonResponse({"tags": res}, status=200)
else:
search_url = 'https://www.googleapis.com/youtube/v3/search'
params = {
'part': 'snippet',
'q':url,
'key' : settings.YOUTUBE_DATA_API_KEY,
'maxResults' : 2,
}
video_ids = []
r = requests.get(search_url,params = params)
results = r.json()["items"]
for result in results:
video_ids.append(result['id']['videoId'])
obj = []
obj = funcurlscrppingwithkeyword(video_ids)
if type == 'YouTube':
return JsonResponse({"tags": obj}, status=200)
else:
res = ['#' + x for x in obj]
return JsonResponse({"tags": res}, status=200)
else:
return HttpResponse("Request method is not a GET")
任何建议将不胜感激。
谢谢。
解决方案
问题可能来自这里:
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['keywords']:
insert = tag.attrs['content']
print(insert)
data = insert.split(',')
和这里:
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['keywords']:
insert1 = tag.attrs['content']
print(insert1)
data1 = insert1.split(',')
如果条件不成立,可能会发生插入未初始化的情况。insert
您可以通过在 for 循环之前初始化来解决此问题。
insert = "" # some default value that works
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['keywords']:
insert = tag.attrs['content']
print(insert)
data = insert.split(',')
另一个:
insert = "" # some default value that works
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['keywords']:
insert1 = tag.attrs['content']
print(insert1)
data1 = insert1.split(',')
推荐阅读
- c++ - 在 C++ 中连接两个字符
- selenium - 无法在并行模式下执行套件
- php - 联系表格 7 将数据传递给 Ajax 谢谢你的消息
- python - 为什么可以在不表示'self'关键字的情况下初始化python类属性?
- ruby-on-rails - STRIPE ROR:没有路线匹配费用/新错误
- angular - 在 Angular 的父模板中调用子组件的方法是一种好习惯吗?
- python - BeautifulSoup 获取其中的链接和信息
- plsql - 集合类型中的 PL/SQL 函数
- sql - 从 SQL 中的数组中删除空值
- solr - 使用 SystemD 运行 Solr:在运行时应用的用户限制 (ulimit) 与配置的限制不同