如何在Python中包装内置方法? (或’如何通过引用传递它们’)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Python中包装内置方法? (或’如何通过引用传递它们’),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1082字,纯文字阅读大概需要2分钟。
内容图文
![如何在Python中包装内置方法? (或’如何通过引用传递它们’)](/upload/InfoBanner/zyjiaocheng/729/4065e37a9e6044b1b14bb966298b3d3a.jpg)
我想用一个包装器包装默认的open方法,该包装器也应该捕获异常.这是一个有效的测试示例:
truemethod = open
def fn(*args, **kwargs):
try:
return truemethod(*args, **kwargs)
except (IOError, OSError):
sys.exit('Can\'t open \'{0}\'. Error #{1[0]}: {1[1]}'.format(args[0], sys.exc_info()[1].args))
open = fn
我想制作一个通用的方法:
def wrap(method, exceptions = (OSError, IOError)):
truemethod = method
def fn(*args, **kwargs):
try:
return truemethod(*args, **kwargs)
except exceptions:
sys.exit('Can\'t open \'{0}\'. Error #{1[0]}: {1[1]}'.format(args[0], sys.exc_info()[1].args))
method = fn
但它不起作用:
>>> wrap(open)
>>> open
<built-in function open>
显然,method是参数的副本,而不是我期望的引用.任何pythonic解决方法?
解决方法:
你的代码的问题在于内部包装,你的method = fn语句只是改变方法的本地值,它不会改变open的较大值.您必须自己分配这些名称:
def wrap(method, exceptions = (OSError, IOError)):
def fn(*args, **kwargs):
try:
return method(*args, **kwargs)
except exceptions:
sys.exit('Can\'t open \'{0}\'. Error #{1[0]}: {1[1]}'.format(args[0], sys.exc_info()[1].args))
return fn
open = wrap(open)
foo = wrap(foo)
内容总结
以上是互联网集市为您收集整理的如何在Python中包装内置方法? (或’如何通过引用传递它们’)全部内容,希望文章能够帮你解决如何在Python中包装内置方法? (或’如何通过引用传递它们’)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。