如何解决python if/else 和 try/except 组合没有冗余
在玩 icecream 时,我编写了以下代码行
if __debug__:
try:
from icecream import ic
ic.configureOutput(includeContext=True)
except ImportError: # Graceful fallback if IceCream isn't installed.
ic = lambda *a: None if not a else (a[0] if len(a) == 1 else a) # noqa
else:
ic = lambda *a: None if not a else (a[0] if len(a) == 1 else a) # noqa
如您所见,我想在两种情况下都将(相同的)lambda 表达式分配给 ic
- 如果不调试代码或
- 如果导入冰淇淋不起作用
我想知道是否有一种(可能是 pythonic)方法来处理这个想法而没有冗余。
解决方法
您可以定义一个默认值,然后根据需要稍后覆盖它。我还会添加评论以使其清楚。
sha key
顺便说一句:
- Named lambdas are bad practice. Use a
def
instead. - 为了更好的可读性,我重写了函数以避免双重条件表达式。
- 尽量在“try”子句中尽可能少地放入必要的内容,并使用
def ic(*a): # May be overridden later if not a: return None return a[0] if len(a) == 1 else a if __debug__: try: from icecream import ic # Override default except ImportError: pass # Fallback to default else: ic.configureOutput(includeContext=True)
来定义如果else
成功会发生什么。
评论中 deceze 建议的模式略有不同:
# file my_icecream.py:
def ic(*a):
"""Icecream fallback implementation"""
if not a:
return None
elif len(a) == 1:
return a[0]
else:
return a
# original file
if not __debug__:
from my_icecream import ic
else:
try:
from icecream import ic
ic.configureOutput(includeContext=True)
except ImportError:
from my_icecream import ic
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。