Python TypeError: 'builtin_function_or_method' object is not subscriptable

in 互联网技术 with 0 comment  访问: 20,931 次

错误代码

伪代码:

#!/usr/bin/env python3
a = {'name': 'nock', 'age': 18}
print(a['name'], a.get['name'])

上面的代码是我模拟我当时写程序中代码的情况,我程序中代码如下:

for table_name in ["dns", "outside"]:
    select_sql = "SELECT * FROM %s" % table_name
    if table_name == 'dns':
        dns_data = get_mysql_data(select_sql)
    elif table_name == 'outside':
        ping_data = get_mysql_data(select_sql)

def data_merge(data=None):
    for i in dns_data:
        print(i.get['id'])

错误结果:

File "test.py", line 3, in <module>
    print(a['name'], a.get['name'])
TypeError: 'builtin_function_or_method' object is not subscriptable

我相信明眼人一看就知道哪里出错了,就是a.get 后面应该是小括号而不应该是中括号,正确代码如下:

#!/usr/bin/env python3
a = {'name': 'nock', 'age': 18}
print(a['name'], a.get('name'))

为什么会犯错

因为我知道Python字典利用a[key]的方式是可以访问value元素的,但是这种情况在key不存在的情况下会报KeyError 错误,而使用get方法则不会抛出错误,默认是None,当然可以d.get("name", "default") 指定默认值,如下:
default.png

那既然我知道这么情况,我报错了,就是因为我记错了,是.get(),我记成.get[]了,这就是刻板印象啊,现在好了搞明白了,切记大家以后看到TypeError: 'builtin_function_or_method' object is not subscriptable 这个错误都是你用错了都是括号不对!

参考:https://stackoverflow.com/questions/41995422/python-typeerror-builtin-function-or-method-object-is-not-subscriptable

WeZan