【问题标题】:Exception handling in lambda function?lambda函数中的异常处理?
【发布时间】:2021-10-07 10:41:20
【问题描述】:

我有以下用于语言检测库的 Python 代码,应用于 pandas DataFrame:

df['check'].apply(lambda x: detect(str(x)) else np.nan)

所以如果detect(str(x)) 不起作用(异常),新列check 中的行应该是np.nan

但是,代码会响应

SyntaxError: invalid syntax

如何在 lambda 行中添加正确的异常语句?

提前致谢!

--

经过下面的cmets,我解决了如下:

def lang_func(x):
    try:
        language = detect(str(x))
    except:
        language = np.nan
    return language

df['check'] = df['text'].apply(lang_func)

【问题讨论】:

  • 您的意思是使用x if some_condition else y 之类的东西吗?没有ifelse 没有任何意义...但是如果遇到异常,则不能使用它。
  • 您无法在 lambda 表达式中捕获异常。请改用完整的函数。
  • 不是elseor
  • 啊,所以没有办法处理 lambda 函数中的异常?
  • @diggusbiccus or 也不起作用,当主函数抛出错误时。

标签: python exception lambda


【解决方案1】:

您似乎正在尝试使用三元条件运算符,但语法错误。正确的语法是

a if condition else b

因此,您不能使用表达式

detect(str(x)) else np.nan

我只是猜测,但也许你想要

x if detect(str(x)) else np.nan

如果detect() 返回True,则此表达式的计算结果为x,否则为np.nan

【讨论】:

  • apply(lambda x: x if detect(str(x)) else np.nan) 不起作用。当 detect() 抛出错误时停止。
  • 如上所述,您不能在 lambdas 中处理异常。如果您想使用 lambda,请将 detect() 包装在另一个函数中并在那里处理期望。
  • [detect(str(x)) for x in df.text] 也不允许这样做,对吗?
  • 不,您也不能在列表理解中处理异常。当然,您可以将整个理解包装在 try 块中,但是当函数遇到异常时它仍然会终止。如果您预计会出现异常,最好不要使用诸如 listcomps 或 lambdas 之类的简写。
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多