Python 报错“local variable ‘id’ referebced before assigment”

2018-01-05 15:27:07 +08:00
 Iamdoudou
def process_contenturl(url,picture,price,desc):#处理具体商品链接内容
a=requests.get(url)
change=etree.HTML(a.content)
l=change.xpath('//div[@id="attributes"]/ul/li/text()')
stock=change.xpath('//*[@id="J_SpanStock"]/text()')#获取商品库存
for i in range(len(l)):
l[i]=l[i].replace(u'\xa0', '')
if u"上市年份季节" in l[i]:
saleseason=(l[i])[7:]#上市年份季节
elif u"材质成分" in l[i] :
material=(l[i])[5:]#材质成分
elif u"货号" in l[i]:
id=(l[i])[3:]#货号
elif u"适用性别" in l[i]:
gender=(l[i])[5:]#适用性别
else:
remarks="".join(l)#无关紧要的备注
sql="INSERT INTO UNIQLO(id,price,stock,salseason,material,gender,remarks,picture,desc) VALUE (%s,%s,%s,%s,%s,%s,%s,%s,%s)"%(id,price,stock,material,gender,remarks,picture,desc)
print sql


我这边写了这个,但是 print 的时候老是提醒,local variable ‘ id ’ referebced before assigment
这段函数我单独调用测试的时候没什么问题,一旦放入循环调用之后就会提示这个,
按照网上说的使用了 goable 的字段,但是也报错,不知道是哪里问题,求大神请教
1820 次点击
所在节点    Python
6 条回复
Iamdoudou
2018-01-05 15:27:58 +08:00
求教,正在慢慢摸索中
CharlieTian
2018-01-05 16:08:36 +08:00
```
def process_contenturl(url,picture,price,desc):#处理具体商品链接内容
a=requests.get(url)
change=etree.HTML(a.content)
l=change.xpath('//div[@id="attributes"]/ul/li/text()')
stock=change.xpath('//*[@id="J_SpanStock"]/text()')#获取商品库存
for i in range(len(l)):
l[i]=l[i].replace(u'\xa0', '')
if u"上市年份季节" in l[i]:
saleseason=(l[i])[7:]#上市年份季节
elif u"材质成分" in l[i] :
material=(l[i])[5:]#材质成分
elif u"货号" in l[i]:
id=(l[i])[3:]#货号
elif u"适用性别" in l[i]:
gender=(l[i])[5:]#适用性别
else:
remarks="".join(l)#无关紧要的备注
sql="INSERT INTO UNIQLO(id,price,stock,salseason,material,gender,remarks,picture,desc) VALUE (%s,%s,%s,%s,%s,%s,%s,%s,%s)"%(id,price,stock,material,gender,remarks,picture,desc)
print sql
```
想想 id 什么时候才会被定义
fml87
2018-01-05 16:17:27 +08:00
这种情况,pycharm 会警告 local variable ‘ id ’ might be referebced before assigment 吧
Iamdoudou
2018-01-05 16:24:46 +08:00
这个我想了下,在前面定义了一个空的 id,但是现在做着发现了有一个错误,提示‘ gbk ’ codec cna't encode character u'\xa0'in position 421:illegal multibyte sequence
这块,我已经在循环里面增加了
for i in range(len(l)):
l[i]=l[i].replace(u'\xa0', '')
为啥还是出现这个
VYSE
2018-01-05 16:33:56 +08:00
一猜就是这个新手会遇到的坑
def func():
a = 0
def run():
print a
#a = 1
run()
func()

把 a=1 开启注释就会报你那个异常
julyclyde
2018-01-05 20:44:07 +08:00
貌似 python2 特有?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/420344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX