Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用其他try Exception块重新释放异常_Python_Exception - Fatal编程技术网

Python 使用其他try Exception块重新释放异常

Python 使用其他try Exception块重新释放异常,python,exception,Python,Exception,我正在尝试对错误进行一些清理,然后重新引发导致错误的异常: try: with open(filename, 'wb') as f: raise ValueError('something happened') # do something that could fail except Exception as e: # Clean up in case of any er

我正在尝试对错误进行一些清理,然后重新引发导致错误的异常:

try:
    with open(filename, 'wb') as f:
        raise ValueError('something happened')              # do something that could fail
except Exception as e:                                      # Clean up in case of any error
    try:
        os.remove(filename)
    except Exception as f:                                    # Cleaning up could fail too, but we are not interested in that one
        pass
    raise                                                   # This re-raises `e` if file deletion was OK
                                                            # but re-raises `f` if file deletion was not OK
最后一个
raise
语句可能会根据发生的情况升高
e
f
。这显然是不可能取代的

raise


因为原始回溯将被销毁。对我来说,内部异常比外部异常更重要,因此有没有办法专门提出该异常?

不确定嵌套异常的问题是什么:

try:
    raise ValueError('something happened')
except Exception as e:
    try:
        if random.randint(0,1):
            raise OSError('something else happened')
    except OSError:
        raise
    raise
例如:

import random
try:
    try:
        raise ValueError('something happened')
    except Exception:
        try:
            if random.randint(0,1):
                raise OSError('something else happened')
        except OSError:
            raise
        raise
except OSError:
    print('Hello')
except ValueError:
    print('Goodbye')

随机打印
你好
再见

不确定问题是什么,嵌套异常:

try:
    raise ValueError('something happened')
except Exception as e:
    try:
        if random.randint(0,1):
            raise OSError('something else happened')
    except OSError:
        raise
    raise
例如:

import random
try:
    try:
        raise ValueError('something happened')
    except Exception:
        try:
            if random.randint(0,1):
                raise OSError('something else happened')
        except OSError:
            raise
        raise
except OSError:
    print('Hello')
except ValueError:
    print('Goodbye')

随机打印
你好
再见

实际上,我认为整个块可以重新组织为
尝试..除了..最后
块。有什么问题吗?如果您得到一个
OSError
您得到一个嵌套的异常-
在处理上述异常(ValueError)的过程中,发生了另一个异常:(OSError)
否,
尝试..除了..最后
在这里不起作用@AChampion我想重新引发内部异常,不管外部异常是否被抛出。为什么
最终不起作用?您当前的方法仅在外部异常已引发的情况下才会引发内部异常。然后我会被“我想重新引发内部异常,无论是否引发外部异常”所迷惑。只需将
pass
替换为
raise
,然后如果引发内部异常,您将得到内部异常。实际上,我认为整个块可以重新组织为
try..definal
块。有什么问题吗?如果您得到一个
OSError
您得到一个嵌套的异常-
在处理上述异常(ValueError)的过程中,发生了另一个异常:(OSError)
否,
尝试..除了..最后
在这里不起作用@AChampion我想重新引发内部异常,不管外部异常是否被抛出。为什么
最终不起作用?您当前的方法仅在外部异常已引发的情况下才会引发内部异常。然后,我会被“我想重新引发内部异常,无论是否引发外部异常”所迷惑。只需将
pass
替换为
raise
,如果引发内部异常,您将得到内部异常。