英文:
UnboundError: local variable 'item_url' referenced before assignment
问题
在另一个函数中,URL 是一个单独的变量,一切正常运行。
def afd(url):
url = '...'
...
links = [...]
async def ...(...):
items = [...]
result_id = ...
for i in range(5):
if result_id == items[i].id:
item_url = links[i]
break
afd(item_url)
我尝试了什么都没有,因为我在这里没有看到任何问题,也不知道如何修复它。一些互联网上的解决方案没有起作用。
英文:
In another function where URL is a separate variable everything works fine
def afd(url):
url = '...'
...
links = [...]
async def ...(...):
items = [...]
result_id = ...
for i in range(5):
if result_id = items[i].id:
item_url = links[i]
break
afd(item_url)
I tried nothing because I don't see any problems here and have no idea how to fix it. Some solutions from the internet didn't work
答案1
得分: 0
根据错误信息显示,您正在引用一个未分配的变量。
在这种情况下,只有在满足条件result_id = items[id].id
时,才会分配item_url
,但这是不可能的,因为您只是在评估一个赋值语句(例如 x = 10
)而不是一个语句(例如 x == 10
)。
即使在修复语句后,变量item_url
也只会在item.id有效的情况下分配,您应该在item.id无效的情况下定义一个默认值(例如item_url = []
,假设每个项目都有一个不同的URL),或者在if体内使用该变量。
选项1
def afd(url):
url = '...'
...
links = [...]
async def ...(...):
items = [...]
result_id = ...
items_url = [] // 默认值
for i in range(5):
if result_id == items[i].id: // 正确的比较语句
items_url[i] = links[i] // 添加有效的item_url
break
for item_url in items_url:
afd(item_url) // 对每个有效的item_url调用afd
这绝不是最佳实现,而只是基于您提供的代码片段的教育性尝试。
英文:
As the error says, you are referencing a variable that is not assigned.
In this case item_url
only get assigned if the condition result_id = items[id].id
is met, which it's impossible as you are just evaluating an assignment (e.g x = 10
) and not a statement (eg x == 10
).
And even after fixing the statement, the variable item_url
only is assigned for cases in which the item.id is valid, you should define a default value (e.g item_url = []
assuming there is a different url for each item) in case the item.id is invalid or use the variable inside your if body.
Option 1
def afd(url):
url = '...'
...
links = [...]
async def ...(...):
items = [...]
result_id = ...
items_url = [] // default value
for i in range(5):
if result_id == items[i].id: // Correct comparison statement
items_url[i] = links[i] // Add valid item_url
break
for item_url in items_url:
afd(item_url) // Invoke afd over every valid item_url
This is by no means the best implementation but more an educational attempt based on your snippet of code.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论