Bagaimana Anda menangani pengecualian batas waktu baca di python?

Batas waktu dapat dengan mudah ditambahkan ke URL yang Anda minta. Kebetulan, Anda menggunakan URL pihak ketiga dan menunggu tanggapan. Itu selalu merupakan praktik yang baik untuk memberikan batas waktu pada URL, karena kami mungkin ingin URL merespons dalam rentang waktu dengan tanggapan atau kesalahan. Tidak melakukannya, dapat menyebabkan menunggu permintaan itu tanpa batas waktu

Kami dapat memberikan batas waktu ke URL dengan menggunakan param batas waktu dan nilai diteruskan dalam hitungan detik seperti yang ditunjukkan pada contoh di bawah ini –

Contoh

import requests
getdata = 
requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)    

Keluaran

raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout:
HTTPSConnectionPool(host='jsonplaceholder.typicode.com', 
port=443): Max retries exceeded with url: /users (Caused 
by Connect
TimeoutError(, 'Connection to jsonplaceholder.typicode.com timed out. (connect 
timeout = 0.001)'))
_

Batas waktu yang diberikan adalah sebagai berikut −

getdata = 
requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)

Eksekusi melempar kesalahan batas waktu koneksi seperti yang ditunjukkan pada output. Batas waktu yang diberikan adalah 0. 001, yang tidak memungkinkan permintaan untuk mendapatkan kembali respons dan melontarkan kesalahan. Sekarang, kami akan menambah batas waktu dan memeriksa

ReadTimeout_ terjadi ketika situs web yang Anda coba sambungkan tidak mengirim kembali data tepat waktu. Anda dapat mensimulasikan kesalahan ini untuk situs web dengan menggunakan waktu tunggu baca khusus dalam panggilan request.get() Anda

import requests

# Timeout is in seconds
connect_timeout = 5
read_timeout = 0.1
response = requests.get("https://scrapingbee.com/", timeout=(connect_timeout, read_timeout))

Jika Anda yakin IP Anda tidak diblokir oleh situs web dan situs web hanya membutuhkan lebih banyak waktu sebelum mengembalikan data, maka Anda dapat memperbaiki kesalahan ini dengan menambah batas waktu baca

Permintaan adalah standar de-facto ketika membuat permintaan HTTP dengan Python, terutama sejak Python 3. Pustaka sumber terbuka mengabstraksi kompleksitas pengelolaan koneksi jaringan dan membuat pengiriman permintaan HTTP menjadi mudah

Sebagian besar dari Anda mungkin sudah mengetahui cara mengirim HTTP POST, GET, serta jenis permintaan HTTP lainnya. Dalam artikel ini, kami akan memandu Anda tentang cara menyetel waktu tunggu di requests, serta mengelola pengecualian

Isi

Batas waktu dalam permintaan Python

Anda dapat memberi tahu perpustakaan requests untuk berhenti menunggu respons setelah jangka waktu tertentu dengan meneruskan nomor ke parameter timeout. Jika perpustakaan requests_ tidak menerima respons dalam x detik, itu akan menimbulkan kesalahan Timeout

Merupakan praktik terbaik bahwa kode produksi harus menggunakan parameter ini di semua permintaan jaringan. Kegagalan untuk melakukannya dapat menyebabkan program Anda macet tanpa batas. Jika tidak ada timeout yang ditentukan secara eksplisit, waktu permintaan tidak akan habis

requests.get('https://example.com/', timeout=10) # OUTPUT Traceback (most recent call last): File "<stdin>", line 1, in <module> requests.exceptions.Timeout: HTTPConnectionPool(host='example.com', port=80): Request timed out. (timeout=10)

Code language: PHP (php)
_

Tangkap pengecualian batas waktu

Setelah nilai batas waktu ditetapkan, setiap permintaan yang tidak menerima tanggapan dalam jangka waktu yang ditentukan akan menimbulkan kesalahan Timeout. Penting untuk menangani pengecualian ini, jika tidak, program Anda akan dihentikan

Untuk menangkap Timeout kesalahan di requests, Anda harus mengimpor pengecualian itu sendiri menggunakan

import requests from requests.exceptions import Timeout try: requests.get('https://www.example.com, timeout=10) except Timeout: print('Timeout has been raised.')

Code language: PHP (php)
4

import requests from requests.exceptions import Timeout try: requests.get('https://www.example.com, timeout=10) except Timeout: print('Timeout has been raised.')

Code language: PHP (php)

Penanganan batas waktu lanjutan

Sebagian besar permintaan ke server eksternal harus memiliki batas waktu terlampir, seandainya server tidak merespons secara tepat waktu. Secara default, permintaan tidak habis waktu kecuali nilai batas waktu ditetapkan secara eksplisit. Tanpa batas waktu, kode Anda mungkin macet selama beberapa menit atau lebih

Batas waktu koneksi adalah jumlah detik Permintaan akan menunggu klien Anda membuat koneksi ke mesin jarak jauh (sesuai dengan panggilan connect()) pada soket. Ini adalah praktik yang baik untuk mengatur batas waktu koneksi menjadi sedikit lebih besar dari kelipatan 3, yang merupakan jendela pengiriman ulang paket TCP default

Setelah klien Anda terhubung ke server dan mengirim permintaan HTTP, batas waktu baca adalah jumlah detik klien akan menunggu server mengirim respons. (Khususnya, ini adalah jumlah detik klien akan menunggu di antara byte yang dikirim dari server. Di 99. 9% kasus, ini adalah waktu sebelum server mengirimkan byte pertama)

Jika Anda menentukan satu nilai untuk batas waktu, seperti ini

r = requests.get('https://github.com', timeout=5)

Code language: JavaScript (javascript)

Nilai batas waktu akan diterapkan pada batas waktu

import requests from requests.exceptions import Timeout try: requests.get('https://www.example.com, timeout=10) except Timeout: print('Timeout has been raised.')

Code language: PHP (php)
5 dan

import requests from requests.exceptions import Timeout try: requests.get('https://www.example.com, timeout=10) except Timeout: print('Timeout has been raised.')

Code language: PHP (php)
6. Tentukan tuple jika Anda ingin mengatur nilainya secara terpisah

r = requests.get('https://github.com', timeout=(3.05, 27))

Code language: JavaScript (javascript)

Minta batas waktu dalam coroutine async

Karena ada banyak pemula yang menanyakan cara menggunakan requests dalam program asinkron atau coroutine, kami membuat bagian ini khusus untuk menjawab hal itu

requests adalah perpustakaan pemblokiran, yang artinya tidak boleh digunakan dalam coroutine asinkron. Pustaka yang tepat untuk digunakan dalam konteks ini adalah aiohttp dan async-timeout. aiohttp adalah kerangka kerja klien/server HTTP asinkron, sedangkan async-timeout adalah pengelola konteks batas waktu yang kompatibel dengan asyncio yang dapat digunakan untuk membungkus coroutine apa pun di dalam pengelola konteks "batas waktu"

Bagaimana cara mengatasi kesalahan batas waktu dengan Python?

Dengan Python, gunakan stdin. readline() dan stdout. write() alih-alih memasukkan dan mencetak . Pastikan bahwa nilai input untuk kasus uji diteruskan dalam format yang diharapkan.

Bagaimana Anda menangani batas waktu permintaan?

Waktu tunggu dapat dengan mudah ditambahkan ke URL yang Anda minta . Kebetulan, Anda menggunakan URL pihak ketiga dan menunggu tanggapan. Itu selalu merupakan praktik yang baik untuk memberikan batas waktu pada URL, karena kami mungkin ingin URL merespons dalam rentang waktu dengan tanggapan atau kesalahan.

Bagaimana Anda menulis pengecualian batas waktu dengan Python?

Jika permintaan habis, naikkan pengecualian Timeout . Keluaran Sampel. batas waktu = 0. 001 HTTPSConnectionPool(Host='github. com', port=443). Percobaan ulang maksimum terlampaui dengan url. / (Disebabkan oleh ConnectTimeoutError(

Apa kesalahan batas waktu di Python?

TimeoutError dipancarkan setiap kali operasi tertentu dihentikan karena batas waktu, mis. g. halaman. wait_for_selector(selector, **kwargs) atau browser_type. luncurkan(**kwargs). « Pemilih