2016-05-17 56 views
1

我有一個方法,它使用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的值。 我連接它,所以我可以把一個變量放在電子郵件正文中,它會打印出值。

或者我如何從列表中提取內容並將其附加到字符串變量? 我可以打印出字符串變量。

感謝, 里亞茲

回答

3

首先,在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)將只是用整個字符串創建一個項目列表 –

相關問題