分享一下刚遇到的一个小问题,我有一段类似于这样的python代码:
复制代码 代码如下:
# coding: utf-8

class A(object):
@property
def _value(self):
# raise AttributeError("test")
return {"v": "This is a test."}
def __getattr__(self, key):
print "__getattr__:", key
return self._value[key]
if __name__ == '__main__':
a = A()
print a.v
运行后可以得到正确的结果
复制代码 代码如下:
__getattr__: v
This is a test.
但是注意,如果把
复制代码 代码如下:
# raise AttributeError("test")
这行的注释去掉的话,即在_value方法里面抛出AttributeError异常,事情就会变得有些奇怪。程序运行的时候并不会抛出异常,而是会进入一个无限递归:
复制代码 代码如下:
File "attr_test.py", line 12, in __getattr__
return self._value[key]
File "attr_test.py", line 12, in __getattr__
return self._value[key]
RuntimeError: maximum recursion depth exceeded while calling a Python object
通过多方查找后发现是property装饰器的问题,property实际上是一个descriptor。在python doc中可以发现这样的文字:
复制代码 代码如下:
object.__get__(self, instance, owner)
Called to get the attribute of the owner class (class attribute access) or of an instance of that class (instance attribute access). owner is always the owner class, while instance is the instance that the attribute was accessed through, or None when the attribute is accessed through the owner. This method should return the (computed) attribute value or raise an AttributeError exception.
这样当用户访问._value时,抛出了AttributeError从而调用了__getattr__方法去尝试获取。这样程序就变成了无限递归。
这个问题看上去不复杂,但是当你的_value方法是比较隐晦的抛出AttributeError的话,调试起来就会比较困难了。
相关推荐:
SEO北京:数字时代,企业成功的关键,湖南网站建设湖南岚鸿
SEO售产-数字营销新战场,助力企业实现盈利增长,去哪找自贡网站建设
为什么做酒店seo,为什么做酒店 ,ai uehara下载
AI自动帮写,轻松应对内容创作挑战,赋能写作新未来,嘿科技ai
AI智能软件:未来科技的核心力量
提升写作效率,释放创意潜力文章生成AI软件的未来
ChatGPT桌面应用安装了,不能用?解决方案全攻略,让你轻松畅享AI助手!,绫波丽ai智能
seo适合什么职业,seo有前途么 ,ai小精灵
SEO快速提升:让你的网站排名瞬间飙升的秘诀,网站建设的发展目标
SEO优化排名:让您的网站在搜索引擎中脱颖而出,我ai 达瓦仓决
SEO选择:如何挑选最合适的SEO优化策略?,wb免费刷粉网站推广
AI免费免登录:轻松体验人工智能的魔力,无需繁琐注册,华为AI音箱2音质如何
ChatGPT国内版:为中国用户量身定制的智能助手,开启AI新纪元,ai文章赚钱
seo需要做些什么,做seo的 ,超级ai地图
SEO收集:如何通过有效数据收集提升网站排名,鞍山商城网站建设报价
SEO查看-如何通过精确分析提升网站流量与排名,东丽网站建设价格
SEO针对中小企业的增长潜力:如何通过精准优化抢占市场先机,网络推广和营销就选y火10星评价
SEO站群:打造强大网络营销引擎,助力企业快速提升排名与流量,seo网站排名案例
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
SEO观察:2025年搜索引擎优化的新趋势与机遇,seo2是什么状态
ChatGPT为什么访问不了了?了解背后的原因与解决方法,AI怎么拖入路径
SEO要不,来看看如何通过SEO优化提高网站流量和曝光度,seo 获客技巧
ChatGPT打不开了吗?如何快速解决常见问题,恢复顺畅体验!,ai13212511845
ChatGPT暂时不可用?如何高效应对并寻找最佳替代方案!,logo ai教程视频
ChatGPT为什么访问不了?全面解析及解决方案,ai首页设计
SEO努力:提升网站排名的关键策略,网站建设微企动力
seo网络培训是什么,seo工作培训会培训啥 ,ai长投影字
未来智能:AI智能人工软件引领数字化变革
ChatGPT无法加载?检查您的网络设置并尝试重启,轻松解决连接问题!,ai制作艺术字
SEO运营是什么职业,seo运营工程师招聘 ,把ai图层改横幅
seo需要会什么技术呢,seo需要会什么技术呢知乎 ,红色框ai
《*采集站:带你领略全球最全*资源的宝藏平台》,seo优化易下拉瞧瞧
ChatGPT故障你从未听过的真相,究竟是什么让它偶尔“失灵”?,ai 图片 矢量
SEO管家:为您的网站保驾护航的智能SEO助手,网站推广作用有哪些类型
seo用什么论坛引流,seo引流方法 ,ai写作续写神器
SEO就是:让你的品牌脱颖而出,获得更多曝光与流量,梅岭关键词排名优化
文章疑似AI生成怎么办?如何辨别并应对AI生成文章的挑战
AI搜索写文章:一丝丝智慧背后的无限可能,电脑免费ai写作神器
SEO架构:提升网站流量的核心策略,东营南江全平台营销推广
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
ChatGPT诞生背景:人工智能如何突破语言的边界,ai辅助市场调研
ChatGPT页面空白无法登录?如何解决这一困扰?,温州ai字幕生成
SEO建议:如何通过优化提升网站流量,赢得市场竞争,自媒体网站免费推广平台
SEO永远,数字营销的核心力量,广州seo搜索栏内容
为什么越来越多的人选择在知乎发布文章?这里面的机会你可能还没发现!,潍坊关键词排名提升
seo配置是什么,seo设置是什么 ,ai图标制作教程
AI人工智能文章生成器写作新纪元
仿写AI:智能时代的创作革命,洛江区移动房网站推广
什么是seo模型,seo模块总结 ,ai技术授课
ChatGPT显示503:如何应对AI服务不可用的困境?,ai宝贝宝贝