파이썬 for문중 예외처리

파이썬 for문중 예외처리

QA

파이썬 for문중 예외처리

본문

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

for문 :

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

        continue

 

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

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

이렇게 오류가뜨네요

답변을 작성하시기 전에 로그인 해주세요.
전체 2

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT