在返回的元组中使用布尔值" if"声明?

时间:2016-07-29 20:17:53

标签: python python-2.7

现状:

def isTooLarge(intValue):
  if intValue > 100: print "too large"; return True
  return False

if isTooLarge(101): break

现在我想更多地使这个功能和图书馆友好"通过返回errormessagetext而不是打印它:

def isTooLarge(intValue):
  if intValue > 100: return True, "too large"
  return False

bln,str = isTooLarge(101)
if bln: specialprint(str); break

我知道如何再次评估它作为一个单行程? (像" if,str isTooLarge(101):specialprint(str); break"或者Python的方式是什么?

将错误消息放入像" lasterrormessage"等全局变量中没问题。并保持原样。

2 个答案:

答案 0 :(得分:2)

通过使用像错误一样的错误,您可以更加“图书馆友好”:

def CheckNotTooLarge(intValue):
    if intValue > 100:
        raise ValueError("too large") #or AssertionError
    return #or maybe do something else?

然后用户可以使用try: except:

完全单独使用错误消息
try:
   CheckNotTooLarge(101)
except ValueError:
    traceback.print_exc() #print error message
    #handle too large
else:
    #handle not too large

如果你只是想在不处理错误的情况下进行检查,我会看到这会很快变得烦人所以我建议有两个函数,一个只返回一个布尔值,没有额外的工作,另一个引发/返回错误文本:

def isTooLarge(intValue):
    return intValue<=100 #now this is a one liner!

def checkIsTooLarge(intValue):
    "uses isTooLarge to return an error text if the number is too large"
    if isTooLarge(intValue):
       return "too large" #or raise ...
    else:
       return False

答案 1 :(得分:0)

def isTooLarge(intValue):
    return "too large" if intValue > 100 else False

x = isTooLarge(101); x and print(x)

然而。请不要这样做。出于某种原因存在例外情况。仅仅为了它而把事情放在一行就会使你的代码难以阅读。