質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

7122閲覧

Python. Try-Exceptがうまくいかない。IndentationError: unexpected unindent

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/26 16:06

実行環境:python3.6.7

Try-Exceptを書いているのですが、IndentationError: unexpected unindentと出てしまいます。
コードの一部ですが、Try,Exceptの関係に問題があるか、見ていただけないでしょうか?

python

1data = [] 2errors = [] 3for url in urls: #このTRYと、 4 try: 5 result = requests.get(url, headers=headers) 6 c = result.content 7 soup = BeautifulSoup(c, "html.parser") 8 summary = soup.find("div", id="js-bukkenList") 9 cassetteitems = summary.find_all("div", class_="cassetteitem") 10 for cas in cassetteitems: 11 try: 12 new = '' 13 subtitle = '' 14 location = '' 15 station_list = [] 16 yrs = '' 17 heights = '' 18 floor = '' 19 rent = '' 20 admin = '' 21 others = '' 22 floor_plan = '' 23 area = 0 24 25 # 物件名 26 subtitle = cas.find("div",class_="cassetteitem_content-title").string 27 # 住所 28 location = cas.find("li", class_="cassetteitem_detail-col1").string 29 # 最寄駅(リスト) 30 sta = cas.find("li", class_="cassetteitem_detail-col2") 31 stas = sta.find_all("div", class_="cassetteitem_detail-text") 32 for s in stas: 33 station_list.append(s.string) 34 # 築年数、階数 35 col3 = cas.find("li", class_="cassetteitem_detail-col3") 36 yrs = col3.find_all("div")[0].string 37 heights = col3.find_all("div")[1].string 38 39 tbodies = cas.find_all("tbody") 40 for tbody in tbodies: 41 cols = tbody.find_all("td") 42 for i, col in enumerate(cols): 43 if i == 0: 44 try: 45 new = col.span.string.strip("\r\t\n") 46 except: 47 new = "" 48 if i == 2: 49 floor = col.string 50 if i == 3: 51 rent = col.string 52 if i == 4: 53 admin = col.string 54 if i == 5: 55 others = col.string 56 if i == 6: 57 floor_plan = col.string 58 if i == 7: 59 area = float(col.contents[0].split("m")[0]) 60 data.append([new, subtitle, location, station_list[0], station_list[1], station_list[2], yrs, heights, floor, rent, admin, others, floor_plan, area]) 61 except: #このEXCEPTを対応させたい。 62 errors.append(["error", url, len(data)]) 63 pass

上から4行目のTryと、下から3行目のExceptを対応させたいのですが、以下のように出てしまいます。

cmd

1 File "1.py", line 61 2 except: 3 ^ 4IndentationError: unexpected unindent

インデントの確認は十分に行ったはずなのですが、上手くいきません。
ご教授宜しくお願い致します!

※また、一応コード全文を以下に貼り付けておきます。

python

1import requests 2from bs4 import BeautifulSoup 3import time 4import pandas as pd 5 6url = "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13121&cb=0.0&ct=9999999&et=9999999&cn=9999999&mb=0&mt=9999999&shkr1=03&shkr2=03&shkr3=03&shkr4=03&fw2=&srch_navi=1" 7headers = {"user-agent":"Mozilla/5.0"} 8 9result = requests.get(url, headers=headers) 10c = result.content 11soup = BeautifulSoup(c, "html.parser") 12 13#ページ数を取得  14body = soup.find("body") 15pages = body.find_all("div", class_="pagination pagination_set-nav") 16pages_text = str(pages) 17pages_split = pages_text.split("</a></li>\n</ol>") 18num_pages = int(pages_split[0].split(">")[-1]) 19 20urls = [] 21urls.append(url) 22for i in range(num_pages-1): 23 pg = str(i+2) 24 url_page = url + "&pn" + pg 25 urls.append(url_page) 26# --------------------------------------- 27 28data = [] 29errors = [] 30for url in urls: 31 try: 32 result = requests.get(url, headers=headers) 33 c = result.content 34 soup = BeautifulSoup(c, "html.parser") 35 summary = soup.find("div", id="js-bukkenList") 36 cassetteitems = summary.find_all("div", class_="cassetteitem") 37 for cas in cassetteitems: 38 try: 39 new = '' 40 subtitle = '' 41 location = '' 42 station_list = [] 43 yrs = '' 44 heights = '' 45 floor = '' 46 rent = '' 47 admin = '' 48 others = '' 49 floor_plan = '' 50 area = 0 51 52 # 物件名 53 subtitle = cas.find("div",class_="cassetteitem_content-title").string 54 # 住所 55 location = cas.find("li", class_="cassetteitem_detail-col1").string 56 # 最寄駅(リスト) 57 sta = cas.find("li", class_="cassetteitem_detail-col2") 58 stas = sta.find_all("div", class_="cassetteitem_detail-text") 59 for s in stas: 60 station_list.append(s.string) 61 # 築年数、階数 62 col3 = cas.find("li", class_="cassetteitem_detail-col3") 63 yrs = col3.find_all("div")[0].string 64 heights = col3.find_all("div")[1].string 65 66 tbodies = cas.find_all("tbody") 67 for tbody in tbodies: 68 cols = tbody.find_all("td") 69 for i, col in enumerate(cols): 70 if i == 0: 71 try: 72 new = col.span.string.strip("\r\t\n") 73 except: 74 new = "" 75 if i == 2: 76 floor = col.string 77 if i == 3: 78 rent = col.string 79 if i == 4: 80 admin = col.string 81 if i == 5: 82 others = col.string 83 if i == 6: 84 floor_plan = col.string 85 if i == 7: 86 area = float(col.contents[0].split("m")[0]) 87 data.append([new, subtitle, location, station_list[0], station_list[1], station_list[2], yrs, heights, floor, rent, admin, others, floor_plan, area]) 88 except: 89 errors.append(["error", url, len(data)]) 90 pass 91 92time.sleep(1) 93# ------------------------------------------------------------ 94 95df = pd.DataFrame(data, columns=['新着','物件名','住所','立地1','立地2','立地3','築年数','階数','物件階','家賃','管理費','敷金礼金','間取り','面積'] ) 96df.to_csv('data/suumo_adachi.csv', sep = ',',encoding='utf-8') 97df_errors = pd.DataFrame(errors) 98df_errors.to_csv('data/errors_adachi.csv', sep = ',', encoding='utf-8')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

内側のtry節に対するexcept節が無いからでしょう。両方揃ってワンセットです。

Python

1>>> try: 2... try: 3... pass 4... except: 5 File "<stdin>", line 4 6 except: 7 ^ 8IndentationError: unexpected unindent

そもそもtry節の範囲が広すぎるので、もう少し狭める工夫をした方が良いでしょう。
現状では有りとあらゆる例外を拾うので、非常に制御しづらいコードになっています。

特に、捕捉するクラスを指定しないexceptは厳に避けるようにしてください。
予測しない例外に対しては、その場で落ちるのが最も安全です。

投稿2018/10/26 16:12

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/30 10:30

ご回答ありがとうございました!初歩的なミスをしておりました。。 プログラム自体も見直して、exceptを少なくしました。ありがとうございました。
guest

0

try が3つあるのに対し except が2つしか無いからではないでしょうか

投稿2018/10/26 16:08

set0gut1

総合スコア2413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問