为什么我的Python代码中出现“无”?

时间:2016-03-18 21:28:42

标签: python loops for-loop

我正在尝试遍历六个维基百科页面,以获取每首链接的歌曲列表。当我在终端中运行它时,它给了我这个错误:

source

我认为这是因为当我打印歌曲列表时,“无”会一直显示。有人有什么建议吗?

代码:

Traceback (most recent call last):
  File "scrapeproject.py", line 31, in <module>
    print (getTableLinks(my_url))
  File "scrapeproject.py", line 20, in getTableLinks
    html = urlopen(my_url)
  File "/Users/adriana/Software/Python-3.5.1/mybuild/lib/python3.5/urllib/request.py", line 162, in urlopen
    return opener.open(url, data, timeout)
  File "/Users/adriana/Software/Python-3.5.1/mybuild/lib/python3.5/urllib/request.py", line 456, in open
    req.timeout = timeout
AttributeError: 'NoneType' object has no attribute 'timeout'

2 个答案:

答案 0 :(得分:1)

您没有从createUrl返回任何内容,因此无法返回

如果你想要创建一批六个网址,然后解析数据/使用网页抓取..我建议将它们附加到列表或将每个网址映射到函数以便在程序上进行解析,然后这样做或返回列表并迭代它以进行解析。

答案 1 :(得分:0)

问题不在于您突出显示的区域。问题出在你构造fullUrl的循环中。完全摆脱它,因为你不需要一个函数来构建链接。

然后在您的函数定义下面,尝试:

for n in range(2008,2015):
    print(getTableLinks(main + str(n)))

根据您的需要更改年份。

老实说,为了将来的使用,更好的方法是使用错误处理。这将允许您运行该函数,直到没有剩余年份(抛出异常)并且循环将退出。这使您无需检查有多少年,您只需调整起始年份即可。要正确执行此操作,您需要查找错误处理并专门处理尝试无效年份返回的错误,并执行类似除AttributeError:之类的操作或使用代码示例时出现的错误下面。

for n in range(2008,2015):
    try:
        print(getTableLinks(main + str(n)))
    except:
        break