如何处理除一个例外以外的所有例外情况?
try:
something
except <any Exception except for a NoChildException>:
# handling
这样的事情,除非不破坏原始的追溯:
try:
something
except NoChildException:
raise NoChildException
except Exception:
# handling
答案 0 :(得分:39)
答案是简单地做一个raise
:
try:
...
except NoChildException:
# optionally, do some stuff here and then ...
raise
except Exception:
# handling
这将重新引发最后抛出的异常,原始堆栈跟踪保持不变(即使它已被处理!)。
答案 1 :(得分:1)
我认为这是对已接受答案的改进。
try:
dosomestuff()
except MySpecialException:
ttype, value, traceback = sys.exc_info()
raise ttype, value, traceback
except Exception as e:
mse = convert_to_myspecialexception_with_local_context(e, context)
raise mse
这种方法通过在捕获MySpecialException时保持原始堆栈跟踪来改进已接受的答案,因此当您的顶级异常处理程序记录异常时,您将获得指向抛出原始异常的位置的回溯。 / p>
答案 2 :(得分:1)
Python的新手...但这不是一个可行的答案吗? 我用它,显然可以用....并且是线性的。
try:
something
except NoChildException:
assert True
except Exception:
# handling
例如,我用它来摆脱(在某些情况下无用)来自os.mkdir的返回异常FileExistsError。
那是我的代码是
try:
os.mkdir(dbFileDir, mode=0o700)
except FileExistsError:
assert True
我只是接受执行dir,因为该dir无法通过某种方式访问。
答案 3 :(得分:-1)
我找到了一个上下文,其中捕获所有错误,但一个不是坏事,即单元测试。
如果我有方法:
pattern = "C:\Users\Name\Folder\july\mid_2014-07-2?-00.csv"
bad_files=[]
for filename in glob.iglob(patterm):
num_lines = sum(1 for line in open(filename))
if num_lines!=144:
s = 144 - num_lines
bad_files.append(filename)
print bad_files
然后它可能会有一个单元测试,看起来像:
def my_method():
try:
something()
except IOError, e:
handle_it()
因为您现在已经检测到my_method只是引发了意外的异常。