2020-06-04 Python异常处理

抛出异常

assert语句

当assert语句后面的内容是假时,终止程序报出异常(AssertionError)。

1 ls=[1,2]
2 assert len(ls)>1
3 ls.pop()
4 assert len(ls)>1

raise语句

raise [Exception[,args[,traceback]]]

Exception是异常类型,可以使标准异常中的任何一种,也可以是自己设定的,args是自己提供的异常参数,最后一个参数为跟踪异常对象,一般很少用。

raise Exception("wrong")

异常可以有参数,在抛出时会说明自己写入的错误原因。

编写Exception的常用模板:

class CustomError(Exception):
    def __init__(self,ErrorInfo):
        super().__init__(self)
        self.errorinfo=ErrorInfo
    def __str__(self):
        return self.errorinfo

这样就可以使用自己编写的异常去完成这个抛出异常的操作。

异常种类

IndexError(索引超出),AttributeError(尝试访问未知的对象属性),KeyError(字典中查找一个不存在的关键字),NameError(尝试访问一个不存在的变量)

OSError(操作系统产生异常,例:打开不存在的文件),SyntaxError(Python语法错误),ZeroDivisionError(除数为零)

捕获异常

try-except语句

try:
    检测范围 
except Exceptiom[as reason]:
    出现异常后的处理代码


try:
    f=open('1.txt')
    print(f.read())
    f.close()
except OSError:
    print('wrong')

针对不同的异常可以设置多个except,同时如果想了解具体异常情况,可以进行reason的输出。

except OSError as reason:
    print("wrong:"+str(reason))

对多个异常也可以进行统一处理,捕获所有异常

````#捕获多个异常
except OSError as reason:
    print(''+str(reason))
except TypeError as reason:
    print(''+str(reason))
````#捕获所有异常
except:
    print("error")
````

try-finally语句

finally是用来收拾残局的,比如在打开文件后,因为其他的语句出现错误,而导致文件不能正常关闭,那么可能导致文件内容丢失,所以我们需要finally收拾残局。

try:
    f=open("1.txt")
    print("success")
    sum=1+'1'
    f.close()
except:
    print("error")
finally:
    f.close()

else可以跟在while,try,for后面,但是如果break或者出现异常,else将不会执行。

使用with语句打开文件不会出现忘记关闭的情况。

try:
    with open("1.txt"):
        for each_line in f:
            print(each_line)
except OSError as reason:
    print("error")
原文地址:https://www.cnblogs.com/threeidiots/p/13041951.html