LMSouq
general-dev Open

Python handling socket.error: [Errno 104] Connection reset by peer

AT
Athena Wisdom
1 month ago
3 views
Problem Description
When using Python 2.7 with `urllib2` to retrieve data from an API, I get the error `[Errno 104] Connection reset by peer`. Whats causing the error, and how should the error be handled so that the script does not crash? **ticker.py** def urlopen(url): response = None request = urllib2.Request(url=url) try: response = urllib2.urlopen(request).read() except urllib2.HTTPError as err: print "HTTPError: {} ({})".format(url, err.code) except urllib2.URLError as err: print "URLError: {} ({})".format(url, err.reason) except httplib.BadStatusLine as err: print "BadStatusLine: {}".format(url) return response def get_rate(from_currency="EUR", to_currency="USD"): url = "https://finance.yahoo.com/d/quotes.csv?f=sl1&s=%s%s=X" % ( from_currency, to_currency) data = urlopen(url) if "%s%s" % (from_currency, to_currency) in data: return float(data.strip().split(",")[1]) return None counter = 0 while True: counter = counter + 1 if counter==0 or counter%10: rateEurUsd = float(get_rate('EUR', 'USD')) # does more stuff here **Traceback** Traceback (most recent call last): File "/var/www/testApp/python/ticker.py", line 71, in <module> rateEurUsd = float(get_rate('EUR', 'USD')) File "/var/www/testApp/python/ticker.py", line 29, in get_exchange_rate data = urlopen(url) File "/var/www/testApp/python/ticker.py", line 16, in urlopen response = urllib2.urlopen(request).read() File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 406, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 519, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 438, in error result = self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 625, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/usr/lib/python2.7/urllib2.py", line 406, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 519, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 438, in error result = self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 625, in http_error_302...

AI-Generated Solution

Powered by LMSouq AI · GPT-4.1-mini

✓ Solution Ready
Analyzing problem and generating solution…
Was this solution helpful?
Back to Knowledge Base