使用时出错列表.append()打印工作时

2024-05-29 02:14:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做一个简单的网络刮板,将给我发送一个关于网站页面上发布的交易电子邮件。我正在使用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)

我很感激你在这方面的帮助。你知道吗

谢谢


Tags: in命令numbermost列表titlewithmsg
3条回答

移动到一个答案,因为人们正在短接你的有效信息。你知道吗

  1. 是的,您需要return函数中的数据,而不是print对其进行加密。因此print更改为return,您将被设置为(只要您返回字符串,或清理数据)

  2. 这是一个关于调试代码的好课程。你的堆栈跟踪说明了这个问题,但是你的标题忽略了它,就像其他一些一样。.join()需要字符串类型,所以这就是问题所在。

要调试奇怪的问题,您需要更多地关注stacktrace,它被prints弄得有点混乱(不要担心-我们之前都忽略了这些数据)。你知道吗

None是可以在列表中的有效类型。结果,当Foo返回nothing时调用mylist.append(Foo()),会将None追加到列表中。完全有效。你知道吗

然而,您实际的问题是当您尝试调用.join(ListWithNotStringsInIt)时。我给出了.join()项列表,其中至少有一项不是字符串,也不能隐式转换为字符串(str())。你知道吗

你应该如何解决这个问题以避免将来的问题?清理数据。你知道吗

列表理解是一个很好的方法,但是-如果你负责任地处理数据,它应该是完全没有必要的:

'\n'.join([str(x) for x in my_list])

Python希望作为程序员的您对如何使用它是明智的。结果,你会有很多绳子挂在自己身上(比如看到这样的错误)。你知道吗

这里不需要理解列表,如果你有责任正确使用列表,那就完全没有必要了。但是这是一种检查您得到了什么的方法,特别是当抛出异常并且您正在调试问题时。你知道吗

更改title函数中return上的print语句。你知道吗

def title(number):
    if number == 1:
      return "  - Post with most thanks    "
    elif number == 2:
      return "  - Trending Hot Deals    "
    elif number == 3:
      return "  - Popular Threads    "
    else:
      return "  - New Posts    "

请记住,没有return语句的每个函数总是返回None。你知道吗

您的title函数不返回任何内容,因此当您尝试附加调用该函数的结果时,实际上并没有附加来自title的结果。相反,您将附加None。要解决这个问题,您需要返回它们,而不是简单地打印它们。你知道吗

相关问题 更多 >

    热门问题