perpustakaan permintaan dengan Python3 menangani pengecualian dengan cara yang sangat buruk. Di python2 ini berfungsi dengan baik. Saya mencoba meminta GitHub menggunakan requests.get('https://api.github.com')
menggunakan perpustakaan permintaan yang diinstal python2 dan perpustakaan permintaan yang diinstal python3. Mereka tampil berbeda ketika permintaan dibuat selama jaringan mati. (pengecualian apa pun ditangani secara berbeda). Coba instal permintaan di python2 dan python3 dan Anda dapat membuat ulang masalah dengan menghapus koneksi internet saat membuat permintaan. Kode yang saya gunakan
import requests
requests.get('https://api.github.com')
Saya telah menginstal requests==2.5.3
di sistem saya dan saya mencoba memutakhirkan versi ke requests==2.22.0
tetapi masalah tetap ada.
Di python2 memberikan pengecualian yang lebih bersih seperti berikut ini
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'))
`
Traceback (panggilan terakhir terakhir):
File "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", baris 157, di _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
File "/usr/local/lib/python3.6/site-packages/urllib3/util/connection.py", baris 61, di create_connection
untuk res di socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
File "/usr/lib/python3.6/socket.py", baris 745, di getaddrinfo
untuk res di _socket.getaddrinfo(Host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Nama atau layanan tidak diketahui
Selama penanganan pengecualian di atas, pengecualian lain terjadi:
Traceback (panggilan terakhir terakhir):
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 672, di urlopen
terpotong = terpotong,
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 376, di _make_request
self._validate_conn(sambungan)
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 994, di _validate_conn
sambung.koneksi()
File "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", baris 334, terhubung
samb = self._new_conn()
File "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", baris 169, di _new_conn
self, "Gagal membuat sambungan baru: %s" % e
urllib3.exceptions.NewConnectionError:
Selama penanganan pengecualian di atas, pengecualian lain terjadi:
Traceback (panggilan terakhir terakhir):
File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", baris 449, di kirim
batas waktu = batas waktu
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 720, di urlopen
metode, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "/usr/local/lib/python3.6/site-packages/urllib3/util/retry.py", baris 436, secara bertahap
naikkan MaxRetryError(_pool, url, error atau ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.github.com', port=443): Percobaan ulang maksimum terlampaui dengan url: / (Disebabkan oleh NewConnectionError('
Selama penanganan pengecualian di atas, pengecualian lain terjadi:
Traceback (panggilan terakhir terakhir):
berkas "
File "/usr/local/lib/python3.6/site-packages/requests/api.py", baris 75, di get
kembali permintaan('dapatkan', url, params=params, *kwargs)File "/usr/local/lib/python3.6/site-packages/requests/api.py", baris 60, dalam permintaankembali session.request(metode=metode, url=url, * kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", baris 533, dalam permintaan
resp = self.send(persiapan, *send_kwargs)File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", baris 646, di kirimr = adapter.send(permintaan, * kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", baris 516, di kirim
naikkan ConnectionError(e, request=request)
request.exceptions.ConnectionError: HTTPSConnectionPool(host='api.github.com', port=443): Percobaan ulang maksimum terlampaui dengan url: / (Disebabkan oleh 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
Perintah ini hanya tersedia di Requests v2.16.4 dan yang lebih baru. Jika tidak,
berikan beberapa informasi dasar tentang sistem Anda (versi Python,
sistem operasi, &c).
Saya juga mengalami masalah ini, tetapi saya menemukan solusi untuk hasil yang lebih cantik. Perhatikan "dari Tidak Ada" dalam skrip di sini:
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
Jika Anda menjalankan skrip di atas, hasilnya jauh lebih bersih:
$ 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/
Anda hanya dapat melakukan from None
di Python3, dan saya pikir itu berasal dari PEP ini: https://www.python.org/dev/peps/pep-0409/
Saya juga mengalami masalah ini, tetapi saya menemukan solusi untuk hasil yang lebih cantik. Perhatikan "dari Tidak Ada" dalam skrip di sini:
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
Jika Anda menjalankan skrip di atas, hasilnya jauh lebih bersih:
$ 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/
Anda hanya dapat melakukan
from None
di Python3, dan saya pikir itu berasal dari PEP ini: https://www.python.org/dev/peps/pep-0409/
Saya baru saja menemukan masalah yang sama, apakah ada cara dengan solusi ini untuk melanjutkan setelah kesalahan?
Program saya seharusnya tidak keluar setelah pengecualian yang muncul tetapi saya tidak menemukan cara untuk melakukannya.
Komentar yang paling membantu
Saya baru saja menemukan masalah yang sama, apakah ada cara dengan solusi ini untuk melanjutkan setelah kesalahan?
Program saya seharusnya tidak keluar setelah pengecualian yang muncul tetapi saya tidak menemukan cara untuk melakukannya.