Python TypeError:只能连接列表(不是“str”)到列表

问题描述:

我有一个方法,它使用Beautifulsoup从HTML文件中的标签返回一个文本列表。 当我调用方法时,我将从方法返回的值保存到变量中。 我想一个字符串变量。
我再次调用该方法,并将返回的值存储到不同的字符串变量中。 我想连接这两个字符串,以便我可以在换行符上打印每一个字符串。然后,我可以将此添加到我的电子邮件例程中,以便将值打印到电子邮件中。Python TypeError:只能连接列表(不是“str”)到列表

我得到的错误:

Traceback (most recent call last): 
    File "E:/test_runners/selenium_regression_test_5_1_1/ClearCore - Regression Test/Email/email_selenium_report.py", line 43, in <module> 
    print rows_part1 + "/n" + rows_part2 
TypeError: can only concatenate list (not "str") to list 

我的方法实现:

def extract_data_from_report3(filename): 
    html_report_part = open(filename,'r') 
    soup = BeautifulSoup(html_report_part, "html.parser") 
    th = soup.find_all('th') 
    td = soup.find_all('td') 

    headers = [header.get_text(strip=True) for header in soup.find_all("th")] 
    rows = [dict(zip(headers, [td.get_text(strip=True) for td in row.find_all("td")])) 
     for row in soup.find_all("tr")[1:-1]] 
    print(rows) 
    return rows 

要调用的方法如下:

rows_part1 = report.extract_data_from_report3(r"E:\test_runners\selenium_regression_test_5_1_1\TestReport\SeleniumTestReport_part1.html") 
print "part1 = " 
print rows_part1 

rows_part2 = report.extract_data_from_report3(r"E:\test_runners\selenium_regression_test_5_1_1\TestReport\SeleniumTestReport_part2.html") 
print "part2 = " 
print rows_part2 

print rows_part1 + "/n" + rows_part2 

在rows_part1值是:

part1 = 
[{u'Success': u'219', u'Skip': u'0', u'Error': u'9', u'Fail': u'1', u'Total': u'229', u'Class': u'Regression_TestCase.RegressionProject_TestCase2.RegressionProject_TestCase2'}] 

在rows_part2的值是:

part2 = 
[{u'Success': u'21', u'Skip': u'0', u'Error': u'10', u'Fail': u'5', u'Total': u'230', u'Class': u'Regression_TestCase.RegressionProject_TestCase2.RegressionProject_TestCase2'}] 

我想打印出rows_part 1的值,然后在一个新行打印出rows_part2的值。 我连接它,所以我可以把一个变量放在电子邮件正文中,它会打印出值。

或者我如何从列表中提取内容并将其附加到字符串变量? 我可以打印出字符串变量。

感谢, 里亚兹

首先,在Python中,你不必声明一个变量类型,它的引擎盖下分配。这让你对变量类型感到困惑。

returns a list

[...]

I think a string variable

您的打印语句试图打印list类型的对象,则新行,然后又list类型的对象。你的问题来自两者之间的“\ n”。

连接两个字符串是可能的:str1 + str2

连接两个名单是可能的:list1.append(list2)

但连接字符串到一个列表(或列表的字符串)不是!你需要做的是把你的列表对象变成字符串(列表)。

print str(rows_part1) + "/n" + str(rows_part2) 

应该工作。

+0

是的,这很好,我需要把你的列表对象变成字符串(列表)。这现在起作用。谢谢。 –

+0

请注意,对于字符串版本,您无法对它们进行迭代,或者无法对列表进行任何操作。此外,这不是一个容易颠倒的过程,list(str)将只是用整个字符串创建一个项目列表 –