当你只想做一个try-except而不处理异常时,你在Python中如何做呢?

下面的方法是正确的吗?

try:
    shutil.rmtree(path)
except:
    pass

当前回答

首先我引用Jack o'Connor的回答。引用的线程已经关闭,所以我在这里写道:

“在Python 3.4中有一种新的方法可以做到这一点:

from contextlib import suppress

with suppress(Exception):
    # your code

下面是添加它的提交:http://hg.python.org/cpython/rev/406b47c64480

这里是作者Raymond Hettinger,他谈到了这个和其他各种Python热点:https://youtu.be/OSGv2VnC0go?t=43m23s

我对它的补充是Python 2.7的等效:

from contextlib import contextmanager

@contextmanager
def ignored(*exceptions):
    try:
        yield
    except exceptions:
        pass

然后像在Python 3.4中那样使用它:

with ignored(Exception):
    # your code

其他回答

当你只想做一个try catch而不处理异常时,你在Python中如何做呢?

这取决于你对“处理”的定义。

如果你想抓住它不采取任何行动,你张贴的代码将工作。

如果你的意思是你想对一个异常采取行动,而不阻止该异常上升到堆栈,那么你想要这样的东西:

try:
    do_something()
except:
    handle_exception()
    raise  #re-raise the exact same exception that was thrown

完整性:

>>> def divide(x, y):
...     try:
...         result = x / y
...     except ZeroDivisionError:
...         print("division by zero!")
...     else:
...         print("result is", result)
...     finally:
...         print("executing finally clause")

还要注意,你可以像这样捕获异常:

>>> try:
...     this_fails()
... except ZeroDivisionError as err:
...     print("Handling run-time error:", err)

...并像这样重新抛出异常:

>>> try:
...     raise NameError('HiThere')
... except NameError:
...     print('An exception flew by!')
...     raise

此外,多种异常类型可以作为圆括号元组来处理:

try:
    i_might_fail()
except (ValueError, TypeError) as ex:
    print('I failed with: ', ex)

...或作为单独的除条款:

try:
    i_might_fail()
except ValueError:
    print('handling a ValueError...')
except TypeError:
    print('handling a TypeError...')

...请参阅python教程。

我通常会这样做:

try:
    doSomething()
except:
    _ = ""

首先我引用Jack o'Connor的回答。引用的线程已经关闭,所以我在这里写道:

“在Python 3.4中有一种新的方法可以做到这一点:

from contextlib import suppress

with suppress(Exception):
    # your code

下面是添加它的提交:http://hg.python.org/cpython/rev/406b47c64480

这里是作者Raymond Hettinger,他谈到了这个和其他各种Python热点:https://youtu.be/OSGv2VnC0go?t=43m23s

我对它的补充是Python 2.7的等效:

from contextlib import contextmanager

@contextmanager
def ignored(*exceptions):
    try:
        yield
    except exceptions:
        pass

然后像在Python 3.4中那样使用它:

with ignored(Exception):
    # your code

我需要忽略多个命令和fuckit的错误

import fuckit

@fuckit
def helper():
    print('before')
    1/0
    print('after1')
    1/0
    print('after2')

helper()