代码之家  ›  专栏  ›  技术社区  ›  utks009

自定义异常处理是如何工作的,Python?

  •  -1
  • utks009  · 技术社区  · 8 年前

    class CustomFileExcetion(FileNotFoundError):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            print(*args, **kwargs)
    

    def oppen_file(file_path):
        try:
            open('xyx')
        except CustomFileExcetion as exp:
            print(exp)
    
        print('100')
    

    我试图创建自定义异常,但问题是它并没有捕获 我的异常,它抛出异常

    Traceback (most recent call last):
      File "C:/Users/mario/file_exception.py", line 14, in <module>
        open('xyx')
    FileNotFoundError: [Errno 2] No such file or directory: 'xyx'
    

    CustomFileException 具有 FileNotFoundError 或 Exception ,它捕获异常并输出为

    [Errno 2] No such file or directory: 'xyx'
    100
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   deceze    8 年前

    open 提高 FileNotFoundError . 它就是这么做的,你不能改变。

    文件NotFoundError 一个新的子类。这个子类是一个 等级比 文件NotFoundError . 如果捕获的是更具体的子类,则与更通用的父类不匹配。即。, except CustomFileExcetion [原文如此]抓不住 文件NotFoundError .

    如果您想使用自己的自定义异常,则必须自己提出它们。E、 你可以让你的 oppen_file [sic]函数使用该自定义异常:

    def oppen_file(file_path):
        try:
            open(file_path)
        except FileNotFoundError as e:
            raise CustomFileExcetion from e
    

    oppen\u文件 可以预期使用 CustomFileExcetion

    try:
        oppen_file(path)
    except CustomFileExcetion:
        ...
    

    UserPermissionsInsufficientError 或 CoordinatesOutOfBoundsError

        2
  •  0
  •   adarsh    8 年前

    CustomFileExcetion FileNotFoundError ;您的代码抛出后者,后者只能由同一类或其父类或超类捕获。不能通过子类捕获异常。

    就像@deceze写的那样。

    推荐文章