【问题标题】:Setting a default variable value if param is not defined如果未定义参数,则设置默认变量值
【发布时间】:2012-02-06 23:42:28
【问题描述】:

如果没有设置 url 参数,我想分配一个默认值。像这样:

try: 
    limit = self.request.get('limit')
except NameError:
    limit = 10

当然这不起作用,这就是我问的原因。使用此代码,不会分配默认值 (10)。

【问题讨论】:

  • 究竟是什么“不起作用”?你能出错吗?限制设置为意外?
  • 什么是self.request?如果是字典,则.get() 方法采用可选的第二个参数,如果缺少键,则返回该参数。
  • @Carpetsmoker 我更新了帖子
  • 给出一些上下文——self 是什么类?即request.get 是某种 API 的一部分还是你写的?
  • @g.d.d.c 好吧,我不知道。 self.request.get('limit',10) 有效,(这是在 webapp2 请求处理程序中)但我认为如果没有设置第二个参数,它仍然应该引发和错误,不是吗?

标签: python google-app-engine webapp2


【解决方案1】:

dictionary.get 方法帮助说: 得到(...) D.get(k[,d]) -> D[k] 如果 k 在 D 中,否则 d。 d 默认为无。

那么, 解决办法是:

try:
    limit_default_value = 10
    limit = int(self.request.get('limit', limit_default_value))
except ValueError: #catch a string that does not like decimal
    limit = limit_default_value

【讨论】:

  • 请求不是字典,但它的 get() 方法的行为类似。但是请注意,如果存在 is 值,它将始终返回一个字符串(例如 '10'),而如果使用默认值,它将传递默认值(例如 10)不变。这可以通过编写 int(self.request.get('limit', 10)) 来克服。现在,如果表单传递一个看起来不像十进制整数的字符串,则会引发 ValueError;有很多方法可以验证表单输入,但您也可以捕获该异常并在这种情况下替换默认值。
  • Rodrigo,根据 Guido 的 cmets 更正您的答案会很有帮助。
  • 当然很高兴有 Guido 来解决这些问题!
【解决方案2】:

另一种选择是:

limit = self.request.get('limit') or 10

这是因为 or 运算符将计算左侧表达式并在 True 时返回它,否则它将计算右侧表达式并在 True 或 False 时返回它。在这种情况下,我们知道 10 是 True,所以如果没有传递参数,self.request.get('limit') == False 所以(False 或 10)将返回 10。

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 2016-05-08
    • 1970-01-01
    • 2022-06-19
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多