봇 또는 코드에서 오류 발견 시 작성될 포스팅입니다.
코드를 리팩터링하다 오류가 생기는 커맨드를 발견했다. 이를 수정하는 것을 어떻게 알릴까 하다가 A/S 포스팅으로 고치고 앞으로도 이런 방식으로 오류 발견 및 수정을 알리려고 한다.
이번에 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단위 , 를 넣기 위해 사용실행 해보면 다음과 같이 정상 작동한다.
오류가 나는 커맨드를 고쳐보았다. 다른 오류가 발생하면 이러한 포스팅을 다시 올리도록 하겠다.