2017-08-19 136 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)。