【问题标题】:one-liner assignment with exception raised on unexpected value单行赋值,异常值引发异常
【发布时间】:2021-08-11 00:13:21
【问题描述】:

想要通过脚本获取一些参数/输入,并在不期望值时引发异常。

为了简化场景:

#!/usr/bin/env python3

foo = None or raise ValueError

但是看到如下错误:

  File "./raise_on_assignment.py", line 3
    foo = None or raise ValueError
                      ^
SyntaxError: invalid syntax

我知道可以通过将其分成多行来消除错误,例如:

#!/usr/bin/env python3

foo = None
if not foo:
    raise ValueError

但是,有没有办法用单线制作它?

【问题讨论】:

  • 您应该能够将您的两行解决方案放在一行上。但是,将它放在一条线上不会获得任何收益。第一种方法失败,因为raise ValueError 不是表达式。
  • @Carcigenicate 你能给我举个例子,说明如何将多线合并成单线吗?我想要的只是当变量fooNone(意味着用户没有提供参数的值)时,在同一行中引发异常。
  • 只需使用您的两行代码并删除换行符。不过,再一次这样做,您将一无所获。 Smushed 代码不一定是更好的代码。
  • @Carcigenicate 是的。这就是为什么我想知道是否有更好的方法来做到这一点,使其紧凑且易于理解。弄脏不是我的意图。
  • if foo is None:<newline>raise ValueError 分成两行将是最易读的方式。如果您不喜欢它的外观,可以将其包装在一个函数中。像def assert_truthy(val):<newline>if val is None:<newline>raise ValueError(f"The value was None!") 这样的东西。如果您想要一个单行解决方案,那么您只需执行assert_truthy(foo)。 (请注意,<newline> 只是我表示换行符。这不是有效的 Python 语法)。

标签: python-3.x exception variable-assignment raise


【解决方案1】:

你可以分两行得到它,例如:

foo = None
if foo != None: raise ValueError

我不认为你可以定义一个新值,检查一个 if 条件,并在一行中引发一个 ValueError,我仍然可能是错的。

你也许应该在 python 中寻找三元运算符。

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2016-05-24
    • 2014-02-10
    • 2012-04-17
    • 2011-04-23
    相关资源
    最近更新 更多