채택완료

파이썬 for문중 예외처리

2020-11-01 (일) 14:39:20 1,593

corp_name = []
corp_code = []
for corpname in dfstockcode.name:
    corp_name.append(corpname)
for corpcode in dfstockcode.code:
     corp_code.append(corpcode)
dictionary = dict(zip(corp_name, corp_code))


class crawler_1(object):
    def __init__(self, corp_code):
        self.corp_code = corp_code
        self.url = f"https://finance.naver.com/item/main.nhn?code={corp_code}"     
        self.driver = webdriver.Chrome('C:\chromedriver.exe')
        self.delay = 5
    def load_page(self):
        driver = self.driver
        driver.get(self.url)
        
        per_data = driver.find_elements_by_id("_per")
        for perdata in per_data:
            pass
        pbr_data = driver.find_elements_by_id("_pbr")
        for pbrdata in pbr_data:
            pass
        print(corp_code, perdata.text, pbrdata.text)
    def kospi_index(self):
        driver = self.driver
        driver.get('https://finance.naver.com/')
        kospi_data = driver.find_element_by_class_name("num_quot dn")
        print(kospi_data.text)
        
    def close_webdriver(self):
        self.webdriver.close()


corp_code_list = dictionary.values()
for corp_code in corp_code_list:            
    crawler = crawler_1(corp_code)
    crawler.load_page()
    crawler.driver.close()

이렇게 코드를 작성했는데요

for문에 들어가는 종목코드 리스트가 4천개 정도가됩니다

그중에는 없어진 종목코드리스트도 있구여

그래서 없어진 코드값때문에 for문이 반복적으로 돌아가지 않습니다.

for문에서 어떻게 사용해야될지 잘 모르겠습니다.

오류가있으면 그냥 pass 시키고싶습니다

|

답변 2개 / 댓글 3개

채택된 답변
+20 포인트

for문 :

    if 종목코드리스트에 없으면 :

        continue

구글에서 python if continue로 검색해 보세요.

답변에 대한 댓글 3개

답변감사드립니다...
좀더상세히 질문을다시드려도 되겠습니까???

class crawler_1(object):
    def __init__(self, corp_code):
        self.corp_code = corp_code
        self.url = f"https://finance.naver.com/item/main.nhn?code={corp_code}"     
        self.driver = webdriver.Chrome('C:\chromedriver.exe')
        self.delay = 5
    def load_page(self):
        driver = self.driver
        driver.get(self.url)
        per_data = driver.find_elements_by_id("_per")
        for perdata in per_data:
            if perdata ==[]:
                perdata = 'nothing'
            pass

        pbr_data = driver.find_elements_by_id("_pbr")
        for pbrdata in pbr_data:
            if pbrdata ==[]:
                pbrdata = 'nothing'
            pass
        print(corp_code, perdata.text, pbrdata.text)
    def kospi_index(self):
        driver = self.driver
        driver.get('https://finance.naver.com/')
        kospi_data = driver.find_element_by_class_name("num_quot dn")
        print(kospi_data.text)
        
    def close_webdriver(self):
        self.webdriver.close()


corp_code_list = ['066570', '005930', '348350']     
for corp_code in corp_code_list:            
    crawler = crawler_1(corp_code)
    crawler.load_page()
    crawler.driver.close()

이코드에서 주황색글씨가 오류의 원인인데요 그이유가

per 소스코드 값이 N/A로 없습니다 그래서 

per_data = driver.find_elements_by_id("_per")
        for perdata in per_data:
            if perdata ==[]:
                perdata = 'nothing'
            pass

이런식으로 작성했습니다 

print 해보니 공백이 나오길래 

if 공백이있으면 perdata 에 nothing을 할당해줘 라고 작성해보았습니다

그런데도 

UnboundLocalError: local variable 'perdata' referenced before assignment

이렇게 오류가뜨네요

답변을 작성하려면 로그인이 필요합니다.