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개의 댓글