python에서 함수관련하여 질문드립니다.
조회수 483회
def income_sheet_Y(code):
# 데이터 가져오기
fs_rpt_url = "http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A{}&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701".format(code)
fs_rpt_res = requests.get(fs_rpt_url)
soup = BeautifulSoup(fs_rpt_res.text, "lxml")
# 데이터프레임 생성
data_column = ['0', '1', '2', '3', '4', '5']
income_sheet_Y_df = pd.DataFrame(data=None, columns=data_column, index=['0'])
# data 찾기
data_rows = soup.find("div", attrs = {"id":"divSonikY"}).find("tbody").find_all("tr")
for row in data_rows:
columns = row.find_all("td")
data_row = [column.get_text().strip() for column in columns]
income_sheet_Y_df = income_sheet_Y_df.append(pd.Series(data_row, index=income_sheet_Y_df.columns), ignore_index=True)
# data를 숫자로 처리하기
income_sheet_Y_df['0'] = income_sheet_Y_df['0'].str.replace(',', '')
income_sheet_Y_df['1'] = income_sheet_Y_df['1'].str.replace(',', '')
income_sheet_Y_df['2'] = income_sheet_Y_df['2'].str.replace(',', '')
income_sheet_Y_df['3'] = income_sheet_Y_df['3'].str.replace(',', '')
income_sheet_Y_df['4'] = income_sheet_Y_df['4'].str.replace(',', '')
income_sheet_Y_df['5'] = income_sheet_Y_df['5'].str.replace(',', '')
income_sheet_Y_df = income_sheet_Y_df.replace('', np.NaN)
income_sheet_Y_df = income_sheet_Y_df.apply(pd.to_numeric, errors = 'coerce')
income_sheet_Y_df = income_sheet_Y_df.fillna(0)
# 데이터 예쁘게 만들기
columns = soup.find("div", attrs = {"id":"divSonikY"}).find("thead").find_all("th")
data_column = [column.get_text().strip() for column in columns][1:7]
financial_index = ['연습', '매출액', '매출원가', '매출총이익', '판매비와관리비', ' 인건비', ' 유무형자산상각비', ' 연구개발비', ' 광고선전비',' 판매비',' 관리비',' 기타원가성비용',' 기타','영업이익','영업이익(발표기준)','금융수익',' 이자수익',' 배당금수익',' 외환이익',' 대손충당금환입액',' 매출채권처분이익',' 당기손익-공정가치측정 금융자산관련이익',' 금융자산처분이익',' 금융자산평가이익',' 금융자산손상차손환입',' 파생상품이익',' 기타금융수익','금융원가',' 이자비용',' 외환손실',' 대손상각비',' 당기손익-공정가치측정 금융자산관련손실',' 매출채권처분손실',' 금융자산처분손실',' 금융자산평가손실',' 금융자산손상차손',' 파생상품손실',' 기타금융원가','기타수익',' 이자수익',' 배당금수익',' 외환이익',' 재고자산감모손실환입',' 재고자산폐기(처분)이익',' 당기손익-공정가치측정 금융자산평가이익',' 자산처분(폐기)이익',' 자산평가이익',' 자산손상차손환입',' 파생상품이익',' 임대료수익',' 로열티수익',' 수수료수익',' 대손충당금환입',' 충당부채환입액',' 기타','기타비용',' 이자비용',' 외환손실',' 재고자산감모손실',' 재고자산폐기(처분)손실',' 당기손익-공정가치측정 금융자산평가손실',' 자산처분(폐기)손실',' 자산평가손실',' 자산손상차손',' 파생상품손실',' 기타대손상각비',' 충당부채전입액',' 기타','종속기업,공동지배기업및관계기업관련손익',' 지분법손익',' 종속기업,공동지배기업및관계기업투자주식처분손익',' 종속기업,공동지배기업및관계기업투자주식손상관련손익',' 기타', '세전계속사업이익', '법인세비용', '계속영업이익', '중단영업이익', '당기순이익', ' 지배주주순이익', ' 비지배주주순이익']
income_sheet_Y_df.index = financial_index
income_sheet_Y_df.columns = data_column
income_sheet_Y = income_sheet_Y_df.drop("연습")
return income_sheet_Y
def income_sheet_Y(code):
........................
return ......................
def valuation(code):
income_sheet_Y = income_sheet_Y(code)
안녕하세요 파이썬 초보입니다.
이번에 제가 드릴 질문은 함수정의와 관련된 부분입니다.
위 두번째 코딩처럼 무언가 A라는 함수를 정의 내리고, 그것을 B라는 함수안에서 A라는 함수를 실행하려고 하는데요,
UnboundLocalError: local variable 'income_sheet_Y' referenced before assignment
이런 에러가 뜨네요.
전역변수, 지역변수와 관련된 문제라는 부분은 검색을 통해 알았는데, 몇가지 궁금한게 있어서 질문드립니다.
- global을 통해 전역변수를 가져오는 것처럼 함수를 가져오는 것이 가능한지(전역함수?)
- 원래 A라는 함수를 B라는 함수에 적용가능한 건데, 제가 변수를 겹치게 설정해서 오류가 발생한건지
- 위 두 가지가 이외에 혹시 문제되는 부분이 있는 건지 궁금합니다.
맘 같아서는 코드를 전부올리고 싶은데, 코드짜놓은게 너무 길어서 보시기 불편하실까봐 요약해서 궁금증을 올렸습니다.
항상 해시 코드를 통해 파이썬 공부에 많은 도움을 받고 있습니다.
답변 주시는 모든 분들께 감사드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
아래 valuation(code) 부분에서 에러가 날 것 같은데요.
def income_sheet_Y(code): ........................ return ...................... def valuation(code): income_sheet_Y = income_sheet_Y(code)
변수의 값이 정해지고 다른 함수에서도 사용하는 고정된 값인데, 특정 함수에서 해당 변수의 값을 변경하려할 때 나타나는 에러로 알고 있습니다.
이럴 때 global 함수로 변수 선언을 하면 문제 해결이 될 수 있지만.. 같은 이름의 변수가 너무 많이 생겨버립니다.
특정 변수의 값을 여러 번 가져와야 하는 경우 다음과 같이 값을 받는 변수명을 변경해서 사용하면 문제없이 작동하는 것으로 알고 있습니다.
def valuation(code): a = income_sheet_Y(code) b = income_sheet_Y(code) c = income_sheet_Y(code) d = income_sheet_Y(code)
-
댓글 입력