当前位置: 首页 > 面试题库 >

Python:捕获特定异常

公孙志尚
2023-03-14
问题内容

我想捕获一个特定的ValueError,而不仅仅是任何ValueError。
我试过这样的事情:

try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except: ValueError, 'For STRING = ’WPF’, this machine is not a wind machine.':
    pass

但这会引发SyntaxError:无法分配给文字。
然后我尝试了:

try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except ValueError, e:
    if e != 'For STRING = ’WPF’, this machine is not a wind machine.':
        raise ValueError, e

但这引发了例外,即使这是我要避免的例外。


问题答案:

except ValueError,ee是例外,而不是字符串的实例。因此,当您测试e不等于特定字符串时,该测试始终为False。尝试:

if str(e) != "..."

代替。

例:

def catch(msg):
    try:
        raise ValueError(msg)
    except ValueError as e:  # as e syntax added in ~python2.5
        if str(e) != "foo":
            raise
        else:
            print("caught!")

catch("foo")
catch("bar")

通常,如果可以帮助您,您并不是真的希望依赖于错误消息-这太脆弱了。如果您可以控制callable macdat,而不是引发ValueErrorin
macdat,则可以引发自定义异常,该异常继承自ValueError

class MyValueError(ValueError): pass

然后,您只能捕获MyValueError并让其他ValueErrors继续被其他事物捕获(或不捕获)。Simpleexcept ValueError仍然也会捕获这种类型的异常,因此它在其他代码中的行为应相同,这也可能从此函数捕获ValueErrors。



 类似资料:
  • 问题内容: 说我有以下 遇到SpecificException会发生什么?它是否首先将其捕获为通用异常,然后捕获特定异常? 还是只在忽略通用异常的同时捕获SpecificException。 我不希望泛型和特殊异常都被捕获。 问题答案: 否。所有异常都将被第一个块捕获。第二个将永远不会到达(编译器会识别出来,由于代码无法到达而导致错误)。如果要特别对待,则必须采用另一种方法: 然后,第一个块将捕获

  • 问题内容: 我想捕获一个特定的http错误,而不是整个家庭中的任何一个..我想做的是- 但是我最终捕获的是任何一种HTTP错误,但是我只想在指定的网页不存在的情况下捕获!可能是HTTP错误404 ..但我不知道如何指定仅捕获错误404并让系统为其他事件运行默认处理程序。 问题答案: Python 3 Python 2 只是捕获,处理它,如果不是Error 404,只需使用引发该异常即可。 请参阅P

  • 问题内容: 我如何编写一个块来捕获所有异常? 问题答案: 你可以,但你可能不应该: 但是,这也会捕获类似的异常,而你通常不希望那样,对吗?除非你立即重新引发异常,否则请参阅docs中的以下示例:

  • export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status

  • 前面我们学习的多 catch 代码块虽然客观上提高了程序的健壮性,但是也导致了程序代码量大大增加。如果有些异常种类不同,但捕获之后的处理是相同的,例如以下代码。 3 个不同类型的异常,要求捕获之后的处理都是调用 methodA 方法。为了解决这种问题, Java 7 推出了 多异常捕获技术,可以把这些异常合并处理。上述代码修改如下: 注意:由于 FileNotFoundException 属于 I

  • 这是我第一次问有关stackoverflow的问题。对不起,我的英语很差,英语不是我的母语。 我写了这样一个try/except条款: 当结果中没有“主机名”键时,它会出现一个KeyError异常。当我运行我的代码时,我看到异常已经被捕获,因为logger.error(e)在我的日志文件中放置了一个日志。但是它仍然引发了一个异常,没有返回这个{“retcode”: 1,“描述”:“失败”}。 异常