注册 登录
编程论坛 Python论坛

为什么会出错???

周煜 发布于 2018-08-08 17:46, 1495 次点击
程序代码:

import re
import requests as r
import pymongo as pmg

client = pmg.MongoClient('localhost', 27017)
mydb = client['mydb']
b = mydb['编程论坛-python']
g = b.insert_one
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\
/537.36(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
'
}

def get_urls_and_titles(url):
    html = r.get(url, headers=headers).text
    urls = re.findall('<a href="(.*?)" title="发帖时间:', html)
    titles = re.findall('<a href="thread-.*?">(.*?)</a>', html)
    urls = sets(urls)
    for i in range(4):
        del titles[1]
    titles = tuple(titles)
    write((titles, urls, ('title', 'url')))
def sets(things):
    a = set(things)
    a = tuple(a)
    return a
def write(*args):
    for each in args:
        for infos1, infos2, info3 in each[0], each[1], each[2]:
            for info1, info2 in infos1, infos2:
                info = {
                    info3[0]: info1,
                    info3[1]: info2
                    }
                g(info)

if __name__ == '__main__':
    get_urls_and_titles('http://bbs.bccn.net/forum-246-1.html')

完了就报错:

Traceback (most recent call last):
  File "E:/360Downloads/周煜/Python/程序/b.py", line 38, in <module>
    get_urls_and_titles('http://bbs.bccn.net/forum-246-1.html')
  File "E:/360Downloads/周煜/Python/程序/b.py", line 22, in get_urls_and_titles
    write((titles, urls, ('title', 'url')))
  File "E:/360Downloads/周煜/Python/程序/b.py", line 29, in write
    for infos1, infos2, info3 in each[0], each[1], each[2]:
ValueError: too many values to unpack (expected 3)
3 回复
#2
外部三电铃2018-08-08 17:57
def write(*args):
    for each in args:
        print len(each[0])    //50
        print len(each[1])    //50
        print len(each[2])    //2
        for infos1, infos2, info3 in each[0], each[1], each[2]:
            for info1, info2 in infos1, infos2:
                info = {
                    info3[0]: info1,
                    info3[1]: info2
                    }
                print(info)
========================================================
加了上面那3行后发现,each[0], each[1], each[2]长度不一样,后面的已经循环完了,前面的还继续循环。

尽量不要把多个for循环放在一行里面,这样看上去代码行数变少了,其实更难理解了。分开写会好理解一些,也更健壮。


[此贴子已经被作者于2018-8-8 17:58编辑过]

#3
周煜2018-08-09 10:36
改成了
程序代码:

def write(*args):
    for each in args:
        for infos1, infos2 in each[0], each[1]:
            for info1, info2 in infos1, infos2:
                info = {
                    'title': info1,
                    'url': info2
                    }
                g(info)

还是会出同样的错误
#4
周煜2018-08-09 15:49
我找到解决办法了:
程序代码:

def write(*args):
    for each in args:
        for infos1, infos2 in zip(each[0], each[1]):
            for info1, info2 in zip(infos1, infos2):
                info = {
                    'title': info1,
                    'url': info2
                    }
                g(info)
1