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

下面的方法是正确的吗?

try:
    shutil.rmtree(path)
except:
    pass

当前回答

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

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

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

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

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

其他回答

当你只想做一个try catch而不处理异常时, 用Python怎么做?

这将帮助你打印异常是什么:(即尝试catch而不处理异常并打印异常。)

import sys
try:
    doSomething()
except:
    print "Unexpected error:", sys.exc_info()[0]

我通常会这样做:

try:
    doSomething()
except:
    _ = ""

在Python中,我们处理异常的方式与其他语言类似,但区别在于语法上的不同,例如,

try:
    #Your code in which exception can occur
except <here we can put in a particular exception name>:
    # We can call that exception here also, like ZeroDivisionError()
    # now your code
# We can put in a finally block also
finally:
    # Your code...

完整性:

>>> 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-except,但仍然是另一种处理异常的方法,如果你是面向对象编程:

class MyExceptionHandler:

    def __enter__(self):
        ... # Do whatever when "with" block is started
        return self

    def __exit__(self, exc_type, exc_value, tb):
        return True

然后是实际的代码:

with MyExceptionHandler():
     ... # Code that may or may not raise an exception
     shutil.rmtree(path)

这是怎么回事?

__enter__在进入with块时运行。 __exit__在退出with块时运行 这应该返回True以关闭可能的异常。 这应该返回None(或被认为是False的东西),以避免关闭潜在的异常。 异常类型、实际异常及其回溯作为(位置)参数传递。你可以用这些来决定要做什么。

最后要注意的是,更喜欢try-except。如果您需要比平时更多的抽象,这可能会很有用。