Discuss / Python / 还有一个问题

还有一个问题

Topic source

JOIEUH

#1 Created at ... [Delete] [Delete and Lock User]

Python所有的错误都是从BaseException类派生的. 并且前面"第二个except永远也捕获不到UnicodeError,因为UnicodeError是ValueError的子类,如果有,也被第一个except给捕获了。"

那么我的疑问是?except根本就不需有多个except?直接一个BaseException不就OK了吗?反正它包含了所有异常

try:
    print('try...')
    r = 10 / 0
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
finally:
    print('finally...')
print('END')

可以通过Exception 进行捕获所有异常 try: print('demo..') r = 10/0 except Exception as result: print('出现异常:%s'%result) finally: print('运行结束..') print('end..')

也可以设置捕获开关 class Test(object): def init(self, switch): self.switch = switch def calc(self, a, b): try: return a/b except Exception as result: if self.switch: print("捕获开启,已经捕获到了异常,信息如下:") print(result) else: raise a = Test(True) a.calc(10,0)

许柯KimTsui

#3 Created at ... [Delete] [Delete and Lock User]

可是我们有时候需要根据捕捉不同类型的异常来分别做出不同的处理,这时候就需要多个except了

abcxyz_65536

#4 Created at ... [Delete] [Delete and Lock User]

给你举个栗子—— 如果你是客户,你填了很多表格准备了一堆材料,然后去找政府办事,接待人员只回了一句“准备的不对”就打发你了,这就是BaseException类错误,这样你肯定受不了,肯定要知道到底是哪里不对,是表格填错了还是哪里漏盖了公章,如果是表格填错了那还要明确具体到哪张表哪一行为什么错怎么填才对,所以需要捕获BaseException类的子类,越具体越好。 还在那个例子里面,如果你是领导,下属受理了这个case,但是递过来一堆文件然后说“里面有错,我处理不了,交给你了”,你可以选择原封不动的继续向上级抛出BaseException,但是如果大家都这么做的话,问题最后就都抛给国家主席了……

那座荒城

#5 Created at ... [Delete] [Delete and Lock User]

你要分析原因呀,不能直接告诉你错了,你又不知道哪里错了,假如有很多的异常,我不告诉你是那个异常,反正就是异常,你找去吧,那样就会很累

GSBQW-1

#6 Created at ... [Delete] [Delete and Lock User]

当我们调用BaseException时,报错的时候也是一个具体的错误,我也觉得调用BaseException会报一样的错误,除非是我们对于同一等级的错误进行不同的操作。

神月宗

#7 Created at ... [Delete] [Delete and Lock User]

跟我想得一样,

BaseException是任何的错误都可以捕捉,但是,究竟是哪一个环节出错了呢?你不得而至,所以不推荐使用BaseException! 错误分析越具体,解决问题的效率就越高!推荐看看官方文档!

Nathan_Hu_

#8 Created at ... [Delete] [Delete and Lock User]

abc 的回复很形象,厉害!


  • 1

Reply