因此,我想我有了在Python中使用EAFP的想法,但是在应用它时,我自己的一个例子让代码的可读性变差了。我正在编写一个简单的密码生成器函数:
def generatePassword(length, letters, numbers, puntuation):
其中length是一个int,其他参数是boolean,用于描述组成密码的可能字符。在
如果所有3个布尔参数都为False,我需要引发一个异常。使用LBYL方法,这很简单(而且可读!),但这似乎不是Python中的最佳实践。在
如果所有3个参数均为False,则函数中的此行将引发异常:
^{pr2}$charSet是基于Boolean参数创建的,因此如果它们都是False,那么charSet将是空字符串。然后随机库将引发一个索引器错误。好吧,我捕捉到异常并提出自己的(ValueError?)。在
首先,这样做是正确的吗?也许只是我自己,但我发现有点做作——错误看起来很模糊,可能会使代码的可读性降低?在我看来,更清楚的方法是从以下内容开始函数:
if not(letters or numbers or punctuation): raise ValueError('my error msg')
谢谢。在
在我看来,强制执行调用约定是LBYL的好地方。把三个参数都取出来,这样就可以把所有的函数都取错了。我也一定要在docstring中描述这个限制。在
EAFP(同样,我的想法)更适合于您有合理的方法来处理可能出现的特定异常的情况。在
相关问题 更多 >
编程相关推荐