【发布时间】:2017-08-04 20:58:51
【问题描述】:
我有一个接受整数年份的函数,但我也希望用户能够传入字符串 'ALL' 并且仍然能够取回一些东西。
我现在有这段丑陋的代码:
if type(year) != str or (type(year) == str and year.upper() != 'ALL'):
total_results = self.filterResultsByYear(total_results, year, year2)
结果默认过滤到当前年份,可以按其他年份过滤,但如果用户不想过滤,则必须传入“所有”年份。
我写上述可憎的原因是如果我只有if year.upper() != 'ALL',如果我传入一个整数,我会得到一个TypeError。如果我输入if type(year) != str and year.upper() != 'ALL',我仍然会得到同样的错误。上面的代码看起来真的很难看,我想让它更 Pythonic。我需要什么工具来做到这一点?
【问题讨论】:
-
当
year是字符串但不是“全部”时,预期的行为是什么? -
您是否总是希望输入有效?如果不是,我会说只是检查它是否是有效的年份,或者根本不应用过滤器。
-
@DYZ 我想抛出错误/警告用户输入无效。基本上我希望默认情况下应用过滤器,如果用户提供了一个 int,但如果用户提供了一个字符串并且该字符串恰好是
'all',那么我想忽略过滤器。
标签: python conditional-statements idioms simplification