Skip to main content
 首页 » 编程设计

python之我一直收到缩进错误,我不应该这样

2025年05月04日13lyhabc

每当我在 CMD 中运行我的程序时,我都会收到缩进错误。对我来说,整个程序的缩进看起来很完美,所以我完全不知道为什么会收到错误。

命令错误:

        scraper9.py", line 50 
            browser.get(url2) 
            ^ 
        IndentationError: unexpected unindent 

我已经完全删除了所有缩进并逐行重新缩进以到达当前迭代,但我仍然出错。

导入操作系统 导入系统 导入 csv 从 bs4 导入 BeautifulSoup 导入 urllib2 导入 xlsxwriter 从 Selenium 导入 webdriver

            reload(sys) 
            sys.setdefaultencoding("utf8") 
 
            key_stats_on_main = ["Market Cap", "PE Ratio (TTM)"] 
            key_stats_on_stat = ["Enterprise Value", "Trailing P/E"] 
 
            stocks_arr =[] 
            pfolio_file = open("tickers.csv", "r") 
            for line in pfolio_file: 
                indv_stock_arr = line.strip().split(",") 
                stocks_arr.append(indv_stock_arr) 
 
            print(stocks_arr) 
 
            browser = webdriver.PhantomJS() 
            stock_info_arr = [] 
 
            for stock in stocks_arr: 
                stock_info = [] 
                ticker = stock[0] 
                stock_info.append(ticker) 
 
                url="https://finance.yahoo.com/quote/{0}?p={0}".format(ticker) 
                url2="https://finance.yahoo.com/quote/{0}/key-statistics?p={0}".format(ticker) 
 
                browser.get(url) 
                innerHTML = browser.execute_script("return document.body.innerHTML") 
                soup = BeautifulSoup(innerHTML, "html.parser") 
                for stat in key_stats_on_main: 
                    page_stat1 = soup.find(text = stat) 
                    try: 
                        page_row1 = page_stat1.find_parent("tr") 
                        try: 
                            page_statnum1 = page_row1.find_all("span")[1].contents[1] 
                        except: 
                            page_statnum1 = page_row1.find_all("td")[1].contents[0] 
                        except: 
                            print("Invalid parent for this element") 
                            page_statnum1 = "N/A" 
                        stock_info.append(page_statnum1) 
 
                browser.get(url2) 
                innerHTML2 = browser.execute_script("return document.body.innerHTML2") 
                soup2 = BeautifulSoup(innerHTML2, "html.parser") 
                for stat in key_stats_on_stat: 
                    page_stat2 = soup2.find(text=stat) 
                    try: 
                        page_row2 = page_stat2.find_parent("tr") 
                        try: 
                            page_statnum2 = page_row2.find_all("span")[1].contents[0] 
                        except: 
                            page_statnum2 = page_row2.find_all("td")[1].content[0] 
                    except: 
                        print("Invalid pareent for this element") 
                        page_statnum2 = "N/A" 
                    stock_info.append(page_statnum2) 
 
                stock_info_arr.append(stock_info) 
 
            print(stock_info_arr) 
 
            key_stats_on_main.extend(key_stats_on_stat) 
            workbook = xlsxwriter.Workbook("Stocks01.xlsx") 
            worksheet = workbook.add_worksheet() 
            row = 0 
            col = 2 
 
            for stat in key_stats_on_main: 
                worksheet.write(row, col, stat) 
                col +=1 
 
            row = 1 
            col = 0 
            for our_stock in stock_info_arr: 
                col = 0  
                for info_bit in our_stock: 
                    worksheet.write(row, col, info_bit) 
                    col += 1 
                row += 1 
            workbook.close() 
            print("Script completed") 

我希望代码能够在没有 Ineation 错误的情况下执行。

它出错了。我迷路了。

请您参考如下方法:

您的try: 缺少except: 或finally:。

            for stat in key_stats_on_main: 
                page_stat1 = soup.find(text = stat) 
                try:  # <--------------- this one here 
                    page_row1 = page_stat1.find_parent("tr") 
                    try: 
                        page_statnum1 = page_row1.find_all("span")[1].contents[1] 
                    except: 
                        page_statnum1 = page_row1.find_all("td")[1].contents[0] 
                    except: 
                        print("Invalid parent for this element") 
                        page_statnum1 = "N/A" 
                    stock_info.append(page_statnum1) 
                      # <---------------- needs something here 
            browser.get(url2) 

您的意思可能是第二个 except: 位于第一个 try: 的缩进级别:

            for stat in key_stats_on_main: 
                page_stat1 = soup.find(text = stat) 
                try:  # <--------------- this one here 
                    page_row1 = page_stat1.find_parent("tr") 
                    try: 
                        page_statnum1 = page_row1.find_all("span")[1].contents[1] 
                    except: 
                        page_statnum1 = page_row1.find_all("td")[1].contents[0] 
                except: 
                    print("Invalid parent for this element") 
                    page_statnum1 = "N/A" 
                stock_info.append(page_statnum1) 
 
            browser.get(url2) 

试试吧!

顺便说一句,您应该减少try: 子句中代码的大小,并只捕获您正在处理的异常。在您的情况下,AttributeError(如果 .contents 失败)将被第一个 except: 捕获。更好:

try: 
    found = page_row1.find_all("span") 
    index = 1 
except XError:  # should be the one .find_all() can raise 
    found = page_row1.find_all("td") 
    index = 0 
page_statnum1 = found[1].contents[index] 

对于外部 try/except 也有类似的东西。

这样你就不会掩盖你从未打算处理的其他异常。如果您进行这种伪装,您将很难找出问题所在,因此请避免这样做。