【问题标题】:Python Ternary Operations [duplicate]Python三元运算[重复]
【发布时间】:2021-10-21 09:00:12
【问题描述】:

我有以下代码:

from django_app.models import Model
def func_name():
    name = "name"
    if Model.objects.filter(name=name).count() > 1:
        raise ValidationError("This name already exists.")
    else:
        return name

现在我想把它变成一个单线。这就是我所做的:

from django_app.models import Model
def func_name():
    name = "name"
    raise ValidationError("This name already exists") if Model.objects.filter(name=name).count() > 1 else return name

但这给了我一个语法错误。
在 Python 中可以实现这样的实现吗?

【问题讨论】:

  • 不,因为语法错误告诉您在这种情况下不可能。
  • raisereturn 都是语句,不是表达式,不能成为条件表达式的一部分
  • 其他人怎么说。而且,为什么??

标签: python python-3.x django one-liner


【解决方案1】:

因为这是不可能的。 这就是 Python 的哲学:可读的代码。 你的代码

raise ValidationError("This name already exists") if Model.objects.filter(name=name).count() > 1 else return name

将被执行为

if Model.objects.filter(name=name).count() > 1:
    raise ValidationError("This name already exists")
else:
    raise (return name)

这是无效的

您也无法避免这种情况,因为 raise 不会返回任何数据。

【讨论】:

  • 哦,谢谢,有帮助
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 2011-03-06
  • 2020-06-20
  • 2019-07-14
  • 2014-09-29
  • 2014-04-20
  • 1970-01-01
  • 2015-09-27
相关资源
最近更新 更多