• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

텔레그램 봇 만들기 _ 오류

20.08.15 16:31 작성 조회수 834

1

안녕하세요 강사님

텔레봇을 만들다가 에러가 생겨 이렇게 질문을 올리게 됩니다

강사님의 텔레봇 코드 중 weather까지 작성해서 실행을 해보면 다음과 같은 에러가 발생하는데요.

왜 이러한 에러가 발생하는지 이해가 안됩니다

코드는 박사님이 해주신것과 일치하구요. 안되는 이유를 찾아보기 위해 한줄한줄 실행을 해봤는데요.

박사님이 작성하신 코드에서 import requests를 제거하면 코드가 에러 없이 실행이 되지만, requests 모듈을 불러오면 

꼭 저러한 에러가 발생합니다

하지만 requests 모듈이 없으면 크롤링이 안되니.... 꼭 해결하고  싶어서요

에러를 정독하고 구글링도 해봤지만 해결이 안되 결국 이렇게 질문을 작성합니다.....

도와주세요....

'''

<오류 부분>

DEBUG:urllib3.util.retry:Converted retries value: 3 -> Retry(total=3, connect=None, read=None, redirect=0, status=None)

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.telegram.org:443

DEBUG:urllib3.util.retry:Incremented Retry for (url='/bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates'): Retry(total=2, connect=None, read=None, redirect=0, status=None)

WARNING:urllib3.connectionpool:Retrying (Retry(total=2, connect=None, read=None, redirect=0, status=None)) after connection broken by 'SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])"))': /bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (2): api.telegram.org:443

DEBUG:urllib3.util.retry:Incremented Retry for (url='/bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates'): Retry(total=1, connect=None, read=None, redirect=0, status=None)

WARNING:urllib3.connectionpool:Retrying (Retry(total=1, connect=None, read=None, redirect=0, status=None)) after connection broken by 'SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])"))': /bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (3): api.telegram.org:443

DEBUG:urllib3.util.retry:Incremented Retry for (url='/bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates'): Retry(total=0, connect=None, read=None, redirect=0, status=None)

WARNING:urllib3.connectionpool:Retrying (Retry(total=0, connect=None, read=None, redirect=0, status=None)) after connection broken by 'SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])"))': /bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (4): api.telegram.org:443

Traceback (most recent call last):

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\contrib\pyopenssl.py", line 488, in wrap_socket

    cnx.do_handshake()

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\OpenSSL\SSL.py", line 1915, in do_handshake

    self._raise_ssl_error(self._ssl, result)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\OpenSSL\SSL.py", line 1647, in _raise_ssl_error

    _raise_current_error()

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\OpenSSL\_util.py", line 54, in exception_from_error_queue

    raise exception_type(errors)

OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 677, in urlopen

    chunked=chunked,

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 381, in _make_request

    self._validate_conn(conn)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 976, in _validate_conn

    conn.connect()

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connection.py", line 370, in connect

    ssl_context=context,

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\util\ssl_.py", line 377, in ssl_wrap_socket

    return context.wrap_socket(sock, server_hostname=server_hostname)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\contrib\pyopenssl.py", line 494, in wrap_socket

    raise ssl.SSLError("bad handshake: %r" % e)

ssl.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])",)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\telepot\__init__.py", line 1183, in get_from_telegram_server

    allowed_updates=allowed_upd)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\telepot\__init__.py", line 1000, in getUpdates

    return self._api_request('getUpdates', _rectify(p))

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\telepot\__init__.py", line 491, in _api_request

    return api.request((self._token, method, params, files), **kwargs)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\telepot\api.py", line 154, in request

    r = fn(*args, **kwargs)  # `fn` must be thread-safe

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\request.py", line 171, in request_encode_body

    return self.urlopen(method, url, **extra_kw)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\poolmanager.py", line 336, in urlopen

    response = conn.urlopen(method, u.request_uri, **kw)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 765, in urlopen

    **response_kw

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 765, in urlopen

    **response_kw

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 765, in urlopen

    **response_kw

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 725, in urlopen

    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\urllib3\util\retry.py", line 439, in increment

    raise MaxRetryError(_pool, url, error or ResponseError(cause))

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot934540352:AAFOImmeO8yA8Cg4eI8nhsmu7me5E8vqlkI/getUpdates (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

DEBUG:urllib3.util.retry:Converted retries value: 3 -> Retry(total=3, connect=None, read=None, redirect=0, status=None)

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (5): api.telegram.org:443

Traceback (most recent call last):

  File ".\bot3.py", line 109, in <module>

    bot.message_loop(handler, run_forever=True)

  File "C:\Users\Kangminsu\Anaconda3\lib\site-packages\telepot\__init__.py", line 1340, in message_loop

    time.sleep(10)

KeyboardInterrupt

답변 1

답변을 작성해보세요.

0

일단 위 오류 로그만 갖고 제가 정확하게 어떤 문제라고 판단하긴 어렵습니다. 몇몇가지 상황을 추측하건데.....

로그 내용에 certificate verify failed 가 나온걸로 봐서 텔레그램 토큰이 정상적이지 않거나 만료되었거나 하는 내용일 수 있습니다. 텔레그램 상에서 모든 봇을 제거 후 새로 생성해서 토큰을 발행해보시는걸 추천합니다. 아니면 작성하신 코드가 2번 실행이 되는 경우에도 이런 문제가 발생할 수 있습니다. 컴퓨터를 재부팅 후 다시 코드를 실행해보시는걸 추천합니다. 또 다른 이유로 아나콘다 환경의 오류일수도 있고 (강좌는 이런 저런 여러가지 오류의 대처가 어려울 수 있어 아나콘다 환경이 아닌걸 기준으로 진행합니다.) 

뭔가 알 수 없는 오류가 발생했을 때는 코드의 내용을 최소화 하여 오류의 원인을 찾는 방법을 습득하셔야 합니다. 문제가 발생했을때 일단 문제의 원인을 객관식 문제처럼 몇몇가지 상황을 가정하고 그 가정된 상황을 하나하나 테스트하여 제거해 나가는 방식으로 원인을 찾는 연습을 해야 합니다.

위의 문제에서는 일단 크롤링이 정상적으로 되는지부터 코드를 분리하여 테스트 해보고 크롤링에 문제가 없다면 따로 텔레그램 통신이 되는지 분리해서 또 테스트 해보고 텔레그램 문제면 인증의 문제인지 통신 자체의 문제인지 또 하나하나 코드를 최소화 해서 테스트 해보면서 원인을 찾아봐야 합니다. 위에서 import requests 를 하지 않으면 오류가 나지 않는게 아니라 그에 해당하는코드를 실행하지 않으니 그런것 처럼 보이는 현상으로 판단됩니다. 

저 개인적으로는 입문자에게 아나콘다 환경을 추천하지 않는 이유중 한가지가 어떤 라이브러리 충돌이나 프로그래밍 오류가 발생했을때 입니다. 아나콘다 환경에서는 일반적인 환경과는 약간 다른 환경적 특수성이 생기는데 어떤 오류가 발생했을때 입문자 분들 스스로 해결하기 위해서 한번 더 생각해보고 찾아봐야하는 영역이 생기기 때문입니다.