当你只想做一个try-except而不处理异常时,你在Python中如何做呢?
下面的方法是正确的吗?
try:
shutil.rmtree(path)
except:
pass
当你只想做一个try-except而不处理异常时,你在Python中如何做呢?
下面的方法是正确的吗?
try:
shutil.rmtree(path)
except:
pass
当前回答
try:
doSomething()
except Exception:
pass
or
try:
doSomething()
except:
pass
不同的是第二个也会捕捉KeyboardInterrupt, SystemExit和类似的东西,它们直接从BaseException派生,而不是Exception。
详见文档:
试着声明 异常
然而,捕捉每个错误通常是糟糕的实践——参见为什么“except: pass”是一个糟糕的编程实践?
其他回答
try:
doSomething()
except Exception:
pass
or
try:
doSomething()
except:
pass
不同的是第二个也会捕捉KeyboardInterrupt, SystemExit和类似的东西,它们直接从BaseException派生,而不是Exception。
详见文档:
试着声明 异常
然而,捕捉每个错误通常是糟糕的实践——参见为什么“except: pass”是一个糟糕的编程实践?
当你只想做一个try catch而不处理异常时,你在Python中如何做呢?
这取决于你对“处理”的定义。
如果你想抓住它不采取任何行动,你张贴的代码将工作。
如果你的意思是你想对一个异常采取行动,而不阻止该异常上升到堆栈,那么你想要这样的东西:
try:
do_something()
except:
handle_exception()
raise #re-raise the exact same exception that was thrown
try:
doSomething()
except Exception:
pass
else:
stuffDoneIf()
TryClauseSucceeds()
供您参考,else子句可以放在所有异常之后,只有在try中的代码没有导致异常时才会运行。
完整性:
>>> 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教程。
我需要忽略多个命令和fuckit的错误
import fuckit
@fuckit
def helper():
print('before')
1/0
print('after1')
1/0
print('after2')
helper()