我正在尝试做一个简单的网络刮板,将给我发送一个关于网站页面上发布的交易电子邮件。我正在使用beautifulsoup,以便将信息刮到一个名为“list”的列表中。我可以使用print命令使输出看起来像我想要的那样,但是当我尝试使用相同的循环将字符串附加到列表中时,我得到以下错误
> ----- Post with most thanks ------ Traceback (most recent call last):
> ----- Trending Hot Deals ------ File "C:/Users/Geoff/PycharmProjects/web_scraping/Historian_file.py", line
> 45, in <module>
> ----- Popular Threads ------
> print "\n".join(msg)
> ----- New Posts ------ TypeError: sequence item 0: expected string, NoneType found
>
> Process finished with exit code 1
这是代码,注释掉的部分不起作用,打印命令起作用。你知道吗
def title(number):
if number == 1:
print "----- Post with most thanks ------"
elif number == 2:
print "----- Trending Hot Deals ------"
elif number == 3:
print "----- Popular Threads ------"
else:
print "----- New Posts ------"
msg = []
x = 1
for i in list:
print title(x)
#msg.append(title(x))
x = x+1
for j in i:
l = j.encode_contents()
print l
#msg.append(l)
#print "\n".join(msg)
我很感激你在这方面的帮助。你知道吗
谢谢
移动到一个答案,因为人们正在短接你的有效信息。你知道吗
是的,您需要
return
函数中的数据,而不是print
对其进行加密。因此将print
更改为return
,您将被设置为(只要您返回字符串,或清理数据)这是一个关于调试代码的好课程。你的堆栈跟踪说明了这个问题,但是你的标题忽略了它,就像其他一些一样。
.join()
需要字符串类型,所以这就是问题所在。要调试奇怪的问题,您需要更多地关注stacktrace,它被
prints
弄得有点混乱(不要担心-我们之前都忽略了这些数据)。你知道吗None
是可以在列表中的有效类型。结果,当Foo
返回nothing时调用mylist.append(Foo())
,会将None
追加到列表中。完全有效。你知道吗然而,您实际的问题是当您尝试调用
.join(ListWithNotStringsInIt)
时。我给出了.join()
项列表,其中至少有一项不是字符串,也不能隐式转换为字符串(str()
)。你知道吗你应该如何解决这个问题以避免将来的问题?清理数据。你知道吗
列表理解是一个很好的方法,但是-如果你负责任地处理数据,它应该是完全没有必要的:
Python希望作为程序员的您对如何使用它是明智的。结果,你会有很多绳子挂在自己身上(比如看到这样的错误)。你知道吗
这里不需要理解列表,如果你有责任正确使用列表,那就完全没有必要了。但是这是一种检查您得到了什么的方法,特别是当抛出异常并且您正在调试问题时。你知道吗
更改
title
函数中return
上的print
语句。你知道吗请记住,没有
return
语句的每个函数总是返回None
。你知道吗您的
title
函数不返回任何内容,因此当您尝试附加调用该函数的结果时,实际上并没有附加来自title
的结果。相反,您将附加None
。要解决这个问题,您需要返回它们,而不是简单地打印它们。你知道吗相关问题 更多 >
编程相关推荐