Python3μ΄ μλ μμ² λΌμ΄λΈλ¬λ¦¬λ μμΈλ₯Ό κ½€ λμ λ°©μμΌλ‘ μ²λ¦¬ν©λλ€. python2μμλ μ μλν©λλ€. python2 μ€μΉ μμ² λΌμ΄λΈλ¬λ¦¬μ python3 μ€μΉ μμ² λΌμ΄λΈλ¬λ¦¬λ₯Ό λͺ¨λ μ¬μ©νμ¬ requests.get('https://api.github.com')
μ¬μ©νμ¬ GitHubλ₯Ό μμ²νλ €κ³ νμ΅λλ€. λ€νΈμν¬κ° λ€μ΄λ λμ μμ²μ΄ λ§λ€μ΄μ§λ©΄ λ€λ₯΄κ² μνλ©λλ€. (λͺ¨λ μμΈλ λ€λ₯΄κ² μ²λ¦¬λ©λλ€). python2μ python3 λͺ¨λμ μμ²μ μ€μΉνκ³ μμ² μ μΈν°λ· μ°κ²°μ μ κ±°νμ¬ λ¬Έμ λ₯Ό μ¬νν μ μμ΅λλ€. λ΄κ° μ¬μ©ν μ½λ
import requests
requests.get('https://api.github.com')
λ΄ μμ€ν
μ requests==2.5.3
λ₯Ό μ€μΉνκ³ λ²μ μ requests==2.22.0
μ
κ·Έλ μ΄λνλ €κ³ μλνμ§λ§ μ¬μ ν λ¬Έμ κ° μ§μλ©λλ€.
python2μμλ λ€μκ³Ό κ°μ λ κΉ¨λν μμΈλ₯Ό μ 곡ν©λλ€.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 65, in get
return request('get', url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 49, in request
response = session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 461, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', gaierror(-2, 'Name or service not known'))
`
μμΆμ (κ°μ₯ μ΅κ·Ό νΈμΆ λ§μ§λ§):
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", 157ν, _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
create_connectionμ νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/util/connection.py", 61ν
socket.getaddrinfo(νΈμ€νΈ, ν¬νΈ, μ νκ΅°, socket.SOCK_STREAM)μ ν΄μλ:
getaddrinfoμ νμΌ "/usr/lib/python3.6/socket.py", 745ν
_socket.getaddrinfo(νΈμ€νΈ, ν¬νΈ, μ νκ΅°, μ ν, νλ‘ν νμ
, νλκ·Έ)μ resμ λν΄:
socket.gaierror: [Errno -2] μ΄λ¦ λλ μλΉμ€λ₯Ό μ μ μμ
μμ μμΈλ₯Ό μ²λ¦¬νλ λμ λ€λ₯Έ μμΈκ° λ°μνμ΅λλ€.
μμΆμ (κ°μ₯ μ΅κ·Ό νΈμΆ λ§μ§λ§):
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", 672ν, urlopen
μ²ν¬ = μ²ν¬,
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", 376ν, _make_request
self._validate_conn(conn)
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", 994ν, _validate_conn
μ°κ²°()
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", λΌμΈ 334, μ°κ²°
conn = self._new_conn()
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", 169ν, _new_conn
self, "μ μ°κ²°μ μ€μ νμ§ λͺ»νμ΅λλ€: %s" % e
urllib3.exceptions.NewConnectionError:
μμ μμΈλ₯Ό μ²λ¦¬νλ λμ λ€λ₯Έ μμΈκ° λ°μνμ΅λλ€.
μμΆμ (κ°μ₯ μ΅κ·Ό νΈμΆ λ§μ§λ§):
νμΌ "/usr/local/lib/python3.6/site-packages/requests/adapters.py", 449ν, 보λ΄κΈ°
μκ° μ΄κ³Ό = μκ° μ΄κ³Ό
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", 720ν, urlopen
λ©μλ, URL, μ€λ₯=e, _pool=self, _stacktrace=sys.exc_info()[2]
νμΌ "/usr/local/lib/python3.6/site-packages/urllib3/util/retry.py", μ€ 436, μ¦λΆ
MaxRetryError(_pool, url, error λλ ResponseError(μμΈ)) λ°μ
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.github.com', port=443): μ΅λ μ¬μλ νμ μ΄κ³Ό: url: / (NewConnectionError('λ‘ μΈν΄ λ°μ)
μμ μμΈλ₯Ό μ²λ¦¬νλ λμ λ€λ₯Έ μμΈκ° λ°μνμ΅λλ€.
μμΆμ (κ°μ₯ μ΅κ·Ό νΈμΆ λ§μ§λ§):
νμΌ "
νμΌ "/usr/local/lib/python3.6/site-packages/requests/api.py", 75ν, get
λ°ν μμ²('get', url, params=params, *kwargs)μμ² μ νμΌ "/usr/local/lib/python3.6/site-packages/requests/api.py", 60νsession.request(λ©μλ=λ©μλ, url=url, * kwargs)λ₯Ό
μμ² μ νμΌ "/usr/local/lib/python3.6/site-packages/requests/sessions.py", 533ν
resp = self.send(μ€λΉ, *send_kwargs)νμΌ "/usr/local/lib/python3.6/site-packages/requests/sessions.py", 646ν, 보λ΄κΈ°r = adapter.send(μμ², * kwargs)
νμΌ "/usr/local/lib/python3.6/site-packages/requests/adapters.py", 516ν, 보λ΄κΈ°
μ°κ²° μ€λ₯ λ°μ(e, μμ²=μμ²)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.github.com', port=443): URLλ‘ μ΅λ μ¬μλ νμ μ΄κ³Ό: / (NewConnectionError('λ‘ μΈν΄ λ°μ)
`
import requests
$ python -m requests.help
Python 2.7.15+ (Python2 version)
requests==2.5.3 (Requests version in python2)
=============================
Python 3.6.9 (Python3 version)
requests==2.5.3(Requests version in python3)
=============================
OS: Ubuntu 18.04.3 LTS
μ΄ λͺ
λ Ήμ μμ² v2.16.4 μ΄μμμλ§ μ¬μ©ν μ μμ΅λλ€. κ·Έλ μ§ μμΌλ©΄,
μμ€ν
μ λν λͺ κ°μ§ κΈ°λ³Έ μ 보λ₯Ό μ 곡νμμμ€(Python λ²μ ,
μ΄μ 체μ , &c).
λλ μ΄ λ¬Έμ μ λΆλͺμ³€μ§λ§ λ μμ μΆλ ₯μ μν ν΄κ²° λ°©λ²μ μ°Ύμμ΅λλ€. μ¬κΈ° μ€ν¬λ¦½νΈμμ "from None"μ μ£Όλͺ©νμμμ€.
import requests
url = 'http://10.0.0.12/example/'
try:
requests.get(url, timeout=2)
except requests.exceptions.RequestException:
raise Exception('Failed to connect to %s' % url) from None
μμ μ€ν¬λ¦½νΈλ₯Ό μ€ννλ©΄ μΆλ ₯μ΄ ν¨μ¬ λ κΉ¨λν΄μ§λλ€.
$ python example.py
Traceback (most recent call last):
File "example.py", line 6, in <module>
raise Exception('Failed to connect to %s' % url) from None
Exception: Failed to connect to http://10.0.0.12/example/
Python3μμλ from None
λ§ ν μ μμΌλ©° μ΄ PEPμμ κ°μ Έμ¨ κ² κ°μ΅λλ€. https://www.python.org/dev/peps/pep-0409/
λλ μ΄ λ¬Έμ μ λΆλͺμ³€μ§λ§ λ μμ μΆλ ₯μ μν ν΄κ²° λ°©λ²μ μ°Ύμμ΅λλ€. μ¬κΈ° μ€ν¬λ¦½νΈμμ "from None"μ μ£Όλͺ©νμμμ€.
import requests url = 'http://10.0.0.12/example/' try: requests.get(url, timeout=2) except requests.exceptions.RequestException: raise Exception('Failed to connect to %s' % url) from None
μμ μ€ν¬λ¦½νΈλ₯Ό μ€ννλ©΄ μΆλ ₯μ΄ ν¨μ¬ λ κΉ¨λν΄μ§λλ€.
$ python example.py Traceback (most recent call last): File "example.py", line 6, in <module> raise Exception('Failed to connect to %s' % url) from None Exception: Failed to connect to http://10.0.0.12/example/
Python3μμλ
from None
λ§ ν μ μμΌλ©° μ΄ PEPμμ κ°μ Έμ¨ κ² κ°μ΅λλ€. https://www.python.org/dev/peps/pep-0409/
λ°©κΈ κ°μ λ¬Έμ κ° λ°μνμ΅λλ€. μ΄ ν΄κ²° λ°©λ²μ μ¬μ©νμ¬ μ€λ₯ νμλ κ³μν μ μμ΅λκΉ?
λ΄ νλ‘κ·Έλ¨μ μμΈκ° λ°μν νμ μ’
λ£λμ΄μλ μλμ§λ§ κ·Έλ κ² ν λ°©λ²μ μ°Ύμ§ λͺ»νμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λ°©κΈ κ°μ λ¬Έμ κ° λ°μνμ΅λλ€. μ΄ ν΄κ²° λ°©λ²μ μ¬μ©νμ¬ μ€λ₯ νμλ κ³μν μ μμ΅λκΉ?
λ΄ νλ‘κ·Έλ¨μ μμΈκ° λ°μν νμ μ’ λ£λμ΄μλ μλμ§λ§ κ·Έλ κ² ν λ°©λ²μ μ°Ύμ§ λͺ»νμ΅λλ€.