A/S 1. crawl 커맨드 오류 수정

chaejm55·2021년 9월 16일
0

디스코드봇

목록 보기
18/18
post-thumbnail

봇 또는 코드에서 오류 발견 시 작성될 포스팅입니다.

기존 코드 포스팅

0. 들어가기 전에

코드를 리팩터링하다 오류가 생기는 커맨드를 발견했다. 이를 수정하는 것을 어떻게 알릴까 하다가 A/S 포스팅으로 고치고 앞으로도 이런 방식으로 오류 발견 및 수정을 알리려고 한다.

1. crawl 커맨드 오류 수정

이번에 A/S할 커맨드는 crawl이다. 특히 웹 스크래핑은 웹 구조가 조금만 바뀌어도 오류가 발생하는 부분이다. 하지만 이번엔 일일 확진자 수가 네자릿수가 되면서 숫자에 쉼표가 추가 되어 int() 사용시 ValueError가 발생하게 되었다.

이 현상을 수정해보자.

Util.py

class Util(commands.Cog):

	...
    
    @commands.command(aliases=['코로나'])  # !코로나 입력 시에도 실행 가능
    async def crawl(self, ctx):
    
    ...
        if response_code == 200:  # 정상 작동(코드 200 반환) 시
            soup = BeautifulSoup(response.content, 'lxml')
        else:  # 오류 발생
            return await ctx.send("웹 페이지 오류입니다.")  # 오류 시 바로 종료하도록 함
    
      today_domestic = today[0].text  # 리스트 첫 번째 요소 (국내발생), int() 사용 대신 string으로 바로 넣음 
      today_overseas = today[1].text  # 리스트 두 번째 요소 (해외유입), int() 사용 대신 string으로 바로 넣음
      today_total = format((int(today_domestic.replace(',', '')) + int(today_overseas.replace(',', ''))), ',') # 일일 총 확진자 수를 따로 계산
          accumulate_confirmed = soup.find("div", {"class": "liveNum"}).find("span", {"class": "num"}).text[
                                 4:]  # 앞에 (누적) 글자 자르기
          embed = discord.Embed(title="국내 코로나 확진자 수 현황", description="http://ncov.mohw.go.kr/ 의 정보를 가져옵니다.",
                                color=0x005666)
          embed.add_field(name="일일 확진자",
                          value=f"총: {today_total}명, 국내: {today_domestic}명, 해외유입: {today_overseas}명",
                          inline=False)
          embed.add_field(name="누적 확진자", value=f"{accumulate_confirmed}명", inline=False)
          await ctx.send(embed=embed)
    
    ...
  • format(): 숫자에 1000단위 , 를 넣기 위해 사용

실행 해보면 다음과 같이 정상 작동한다.

2. 마무리

오류가 나는 커맨드를 고쳐보았다. 다른 오류가 발생하면 이러한 포스팅을 다시 올리도록 하겠다.

github 전체 코드

profile
여러가지를 시도하는 학생입니다

0개의 댓글

관련 채용 정보