Saya sudah mencoba beberapa cara dan tidak ada yang menyelesaikan masalah saya. Ini kode saya:

for i in links.readlines():
try:
    link = urlopen(i)
except (HTTPError, URLError) as e:
    print(e.code)
else:
    <Code Goes Here>

Pijat kesalahan:

AttributeError: 'URLError' object has no attribute 'code'

Saya perlu membuat dua Penanganan Kesalahan pada satu pengecualian, tetapi masalahnya saya tidak dapat memanggil atribut HTTPError, setidaknya saya tidak dapat memanggil Penanganan Pengecualian pertama.

1
rafidkarim 12 Maret 2017, 09:22

2 jawaban

Jawaban Terbaik

Anda dapat menangani beberapa pengecualian dengan baris pengecualian yang berbeda.

for i in links.readlines():
try:
    link = urlopen(i)
except HTTPError as e:
    print(e.code)
except URLError as e:
    <do other handling here>
else:
    <Code Goes Here>

Lihat tautan ini untuk detail selengkapnya tentang penanganan pengecualian.

1
Community 23 Mei 2017, 10:30

HTTPError adalah subkelas dari URLError. Variabel instan code tersedia di HTTPError dan bukan di kelas dasar URLError. Oleh karena itu ketika Anda mencoba untuk menangani dua kesalahan di blok except yang sama dan ketika URLError terjadi , variabel instan code tidak ditemukan.

URLError memiliki variabel instan yang disebut reason, jika Anda ingin mendapatkan alasan kesalahannya.

Bahkan variabel reason harus tersedia untuk kedua jenis kesalahan. Jadi, alih-alih mencetak e.code cetak e.reason dan Anda dapat mencapainya menggunakan kode versi Anda sendiri.

for i in links.readlines():
    try:
        link = urlopen(i)
    except (HTTPError, URLError) as e:
        print(e.reason)
    else:
       <Code Goes Here>
0
Afaq 12 Maret 2017, 06:41