python学习日记11

别问我为什么又鸽了,要怪就怪“大黑山艺术体育学院”吧。今天学习如何处理异常。

raise语句

可以使用raise语句引发异常:

raise Exception

关于异常类,请参考python官方给出的文档:https://docs.python.org/zh-cn/3.7/library/exceptions.html。我们也可以自定义异常类:

class Error(Exception): pass

捕获异常

例如当除法运算时,除数为0,解释器会报错,不过我们可以这样写:

try:
    a=2
    b=0
    print(a/b)
except ZeroDivisionError:
    print("除数不能为0")

不过使用if语句貌似更好些,但如果有多个出发运算,需要多个if,但仅需一条try/except。我们可以把try/expect写入类中进行判断,还可以设计一个开关。

class su:
    m=True
    def cl(self,exp):
        try:
            return eval(exp)
        except ZeroDivisionError:
            if self.m:
                print("除数不能为0")
            else:
                raise
a=su()
c=2
b=0
print(a.cl("c/b"))
a.m=0
print(a.cl("c/b"))

当except的语句仍然错误是,解释器会把上下两条错误报告同时输出。
因为一种except只能检测一种类型错误,所以我们可以使用多个except,我们也可以在元组中把错误类型存起来:

try:
    someone
except ERROR1
except (ERROR2,ERROR3)

我们也可以记录错误类型然后打印:

class su:
    m=True
    def cl(self,exp):
        try:
            return eval(exp)
        except ZeroDivisionError as e:
            if self.m:
                print("除数不能为0",e)
            else:
                raise
a=su()
c=2
b=0
print(a.cl("c/b"))

我们也可以不加错误参数,这将略过所有的错误。
也可以在except后加else语句,当无错误时执行else下的代码。
最后,还有finally语句。无论怎样,都将执行finally下的代码。
我们可以把try/expect嵌套在函数中,错误会进行传递。有的时候合理运用try/expect比if效率更高。例如,假设有一个字典,指定存在的键时打印相应的值,否则什么也不做。我们如果用if必须检测一次,查找一次。但我们可以假设这个键在字典里,使用try/expect,如果报错则直接pass。

警告

警告在warnings模块中,被视为报错,详情可以翻阅该模块的手册,此处暂不详细研究。

知识共享许可协议
Text is available under CC BY-NC-SA 4.0 unless otherwise stated.

除非特殊声明,本站所有内容均以 CC BY-NC-SA 4.0协议授权。
上一篇
下一篇