2017-08-19 131 views
-2

我是新來的python,來自強類型的語言背景,所以當我沒有收到任何類型的語法錯誤(使用美麗的湯標記解析)時,我非常沮喪:Python類屬性

from urllib.request import urlopen 
from bs4 import BeautifulSoup 

url = input("Enter URL:") 
html = urlopen(url, context=ctx).read() 

soup = BeautifulSoup(html, 'html.parser') 
print(soup.asdmsakdaskmdkvnqienwekmfsd) 

它只是返回None,因爲沒有這樣的標籤存在於文檔和 它將工作與每一個變量名的方式。爲什麼在代碼嘗試訪問未在類中定義的屬性時沒有錯誤? 是。運營商以某種方式在此重新定義?

+4

一個類可以定義'__getattr__'來處理其實例的隨機屬性訪問。 –

+1

沮喪關於記錄的功能? –

+2

請注意,這是BeautifulSoup特別啓用的功能;通常這會引發AttributeError。 –

回答

3

是的,Python是overloading的動態語言。這包括屬性查找,正如一位評論者已經指出的那樣,這意味着在「編譯」時間很難(有時不可能)告訴「給定」屬性是否存在。在BeautifulSoup的情況下,的任何字符串的動態查找似乎是有意的特徵。其次,這不是語法錯誤。至多,這是一個會導致運行時異常的錯誤(AttributeError)。