当你只想做一个try-except而不处理异常时,你在Python中如何做呢?
下面的方法是正确的吗?
try:
shutil.rmtree(path)
except:
pass
当你只想做一个try-except而不处理异常时,你在Python中如何做呢?
下面的方法是正确的吗?
try:
shutil.rmtree(path)
except:
pass
当前回答
好吧,这不是一个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。如果您需要比平时更多的抽象,这可能会很有用。
其他回答
当你只想做一个try catch而不处理异常时, 用Python怎么做?
这将帮助你打印异常是什么:(即尝试catch而不处理异常并打印异常。)
import sys
try:
doSomething()
except:
print "Unexpected error:", sys.exc_info()[0]
在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...
好吧,这不是一个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。如果您需要比平时更多的抽象,这可能会很有用。
try:
doSomething()
except Exception:
pass
else:
stuffDoneIf()
TryClauseSucceeds()
供您参考,else子句可以放在所有异常之后,只有在try中的代码没有导致异常时才会运行。
try:
doSomething()
except Exception:
pass
or
try:
doSomething()
except:
pass
不同的是第二个也会捕捉KeyboardInterrupt, SystemExit和类似的东西,它们直接从BaseException派生,而不是Exception。
详见文档:
试着声明 异常
然而,捕捉每个错误通常是糟糕的实践——参见为什么“except: pass”是一个糟糕的编程实践?