本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

Python基础-异常处理

一、程序开发中为什么需要异常处理:

有些时候我们的程序在运行过程中可能会有意想不到的事情发生,这种情况就叫做异常,异常如果不处理好,可能直接导致我们的程序退出崩溃。因此我们要对异常进行处理,来确保我们的程序能够稳健的运行。

二、异常处理的语法:

try: # 你感觉可能会崩溃的代码 except 异常名字: # try语句出现异常的时候执行的代码 else: # try语句中没有抛出异常的时候执行的代码 finally: # 不管程序有没有抛出异常,都会执行的代码

示例:

try: a = 1 b = 0 c = a/b print(c) except ZeroDivisionError: print('try中的代码如果抛出异常,会执行这里的代码') else: print('try中的代码如果没有抛出异常,会执行这里的代码') finally: print('不管try中的代码有没有抛出异常,都会执行这里的代码')

三、使用多个except来捕获多个异常:

try: # a = 1 # b = 0 # c = a/b print(c) except ZeroDivisionError: print('这个except语句只会捕获ZeroDivisionError异常') except NameError: print('这个except语句只会捕获NameError异常')

四、如果想要将多个异常放在一个except中捕获,那么可以使用元组的形式:

try: # a = 1 # b = 0 # c = a/b print(c) except (ZeroDivisionError,NameError): print('这个except语句会捕获ZeroDivisionError和NameError异常')

五、如果你不知道具体会抛出什么异常,那么你可以使用Exception来接收所有的异常,示例代码如下:

try: a = 1 b = 0 c = a/b print(c) except Exception as error: print('不管抛出了什么异常,都会执行这里的代码') print(error)

上例中也用到了as关键字,将捕获到的错误赋值给error这个变量,那么你就可以通过这个变量知道这是什么错误了。

六、抛出异常:

有时候你觉得这个地方如果出现了不该出现的,或者没有按照你的想法执行,那么你可以抛出一个异常:

def greet(name,age): if type(name) != str: raise ValueError('name必须为str类型') if type(age) != int: raise ValueError('age必须为int类型') try: greet('zhiliao','18') except ValueError as error: print(error.args)

七、自定义异常:

自定义异常需要继承自Exception类:

class ArgumentError(Exception): def __init__(self,*args,**kwargs): super(ArgumentError,self).__init__(*args,**kwargs) # self.args = args print('参数错误') def greet(name,age): if type(name) != str or type(age) != int: raise ArgumentError('参数类型错误') print('my name is:%s,my age is:%s' % (name,age)) try: greet('zhiliao','18') raise ArgumentError('name必须为str类型') except Exception as error: print(error.args)

八、常见异常:

异常名称 说明
AttributeError 属性错误,访问一个对象的不存在的属性的时候,抛出这个异常
ImportError 导入包错误
IndexError 下标错误,一般有列表越界等
KeyError key错误,一般访问字典的key不存在的时候
NameError 变量名不存在
NotImplementedError 某个方法没有实现的错误
StopIteration 迭代器已经到最后了
IndentationError 缩进错误
TabError 包含了tab和空格错误
TypeError 类型错误,有时候传递了一个错误类型的值给其他函数
UnicodeEncodeError Unicode编码错误,一般是unicode->str错误
UnicodeDecodeError Unicode解码错误,一般是str->unicode错误
ValueError 值错误,比如传一个12a给int()函数转换
ZeroDivisionError 除0错误
IOError 打开一个不存在的文件(在Python3中使用FileNotFoundError)
FileNotFoundError 文件没有找到的错误
更多请参考: https://docs.python.org/3/library/exceptions.html#concrete-exceptions

1449人已阅读,今天你学习了吗?

添加新回复