Apabila menggunakan BeautifulSoup untuk menghuraikan HTML, anda mungkin menghadapi Tiada keputusan atau pengecualian AttributeError yang berkaitan dengan objek NoneType. Ini berlaku apabila elemen atau atribut tertentu tidak ditemui dalam data yang dihuraikan.
BeautifulSoup menyediakan kedua-dua pertanyaan hasil tunggal dan berbilang hasil. Kaedah seperti .find_all yang menyokong berbilang hasil mengembalikan senarai kosong jika tiada unsur sepadan ditemui.
Walau bagaimanapun, kaedah seperti .find dan .select_one, yang menjangkakan hasil tunggal, mengembalikan Tiada jika tiada padanan ditemui. Ini tidak seperti bahasa pengaturcaraan lain di mana pengecualian mungkin dilemparkan sebaliknya.
Untuk mengelakkan ralat AttributeError apabila bekerja dengan Tiada hasil daripada kaedah hasil tunggal:
Pertimbangkan contoh kod daripada soalan:
print(soup.sister) # Returns None because no <sister> tag exists print(soup.find('a', class_='brother')) # Returns None because no <a> tag with class="brother" exists print(soup.select_one('a.brother')) # Returns None, same reason as above soup.select_one('a.brother').text # Throws AttributeError because 'None' has no 'text' attribute
Untuk mengendalikan senario ini dengan betul, gunakan teknik berikut:
if soup.sister is not None: print(soup.sister.name) # Safely accesses the tag name try: print(soup.find('a', class_='brother').text) except AttributeError: print("No 'brother' class found") # Catches the potential error brother_text = soup.select_one('a.brother') or "Brother not found" # Assigns a default value if not found
Dengan mengikuti garis panduan ini, anda boleh menghalang pengecualian AttributeError dan mengendalikan Tiada keputusan dengan berkesan apabila menggunakan BeautifulSoup untuk menghuraikan HTML.
Atas ialah kandungan terperinci Mengapa BeautifulSoup Kadangkala Tiada Kembali dan Bagaimana Saya Mengelakkan AttributeErrors?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!