【问题标题】:How to throw an exception in Python?如何在 Python 中抛出异常?
【发布时间】:2017-11-03 19:55:58
【问题描述】:

我正在尝试使用 Python 的“langdetect”库检测数据框中的外语。

for e in food['product_name'].dropna():
    if detect(e) == 'zh':
        print e

我在这里尝试打印在特定列中找到的每个中文单词。

但是,有时我会收到以下错误消息:

LangDetectException: No features in text.

我了解当找到数字、空格或不是单词的字符串(参考代码、邮件地址...)时会发生这种情况。

我想要的只是抛出一个异常并相应地处理这种情况,但我不知道该怎么做。这是我的尝试:

for e in food['product_name'].dropna():
    if detect(e) == 'zh':
        try:
            print e
        except LangDetectException:
            pass

有人可以帮我解决这个写得不好的 sn-p 吗?显然有问题,但我不知道到底是什么!

【问题讨论】:

  • 异常发生在detect调用中,而不是print
  • 感谢您的评论。那我应该改变什么?
  • raise 异常?我不清楚你在问什么。
  • 写一个保护子句:像 如果这是一个不想要的结果 - 引发异常
  • 看起来您正试图捕获一个异常,而不是引发一个异常。因此,您需要将实际引发异常的代码放在 try 块中。

标签: python exception error-handling


【解决方案1】:

正如上面的 cmets 中提到的,异常是由检测引发的,因此您需要将该调用包装在您的 try 块中:

for e in food['product_name'].dropna():
    try:
        if detect(e) == 'zh':
            print e
    except LangDetectException:
        pass

【讨论】:

  • 感谢您的回答。终于我明白为什么它不起作用了!不幸的是,我现在有一个错误显示:'name 'LangDetectException' is not defined'。我应该定义异常吗?
  • 您需要使用from langdetect.lang_detect_exception import LangDetectException导入自定义异常
  • 比你这么多@wpercy 和卢克史密斯
  • @solub 顺便说一句,当您捕获异常时实际执行某些操作通常是一个好主意,而不是使用pass 忽略它。当然,这取决于您的实际用例。但是您可以,例如,计算有多少项目引发了异常,或者将这些项目保存在某处。
猜你喜欢
  • 2012-01-24
  • 2011-07-24
  • 2011-02-22
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2013-05-24
相关资源
最近更新 更多