在敲写代码过程中,相信很多人都碰过壁,因为总是要出错的嘛,出现错误不要急躁,一步一步去调试,当你解决了这个问题,你会发现快乐加倍。
while True print('hello') # 报错信息: SyntaxError: invalid syntax !!意思是无效语法!!
不过现在的编辑器做的都很好,语法错误都会给出提示,能更好的避免这些问题。
res = open('aa.txt','r') print(res.read()) # 报错信息: FileNotFoundError: [Errno 2] No such file or directory: 'aa.txt' 什么意思呢? 大概意思就是当前目录没有此文件
想一想,我们应该需要做什么呢?
如果想对异常进行处理,需要: 1. 让异常信息不要显示在页面上 2. 能够获取异常信息,然后针对性的进行处理,如写入日志文件等
那我们该如何操作呢?别急,Python 编程语言呢有内置的方法,我来教你
如何获取异常信息? 使用 try...except 组合进行处理 1. 将可能发生异常的代码放到 try 中 2. 使用 except 捕获异常: 意思就是 try 中的代码一旦出错,就自动跳转到 except 中; 如果 try 中的代码没有发生错误,则不执行 except 中的代码 # 语法 try: 代码 except 异常类型: 代码
方法告诉你了,让我们来动手写一写
try: res = open('aa.txt', 'r') except: print('出错了') # 运行结果: 出错了 是不是控制台没有出现红色的信息,感觉很舒适了一些~
不给大家一个一个举例子了,直接看图,这些是我总结的一些比较常见的异常类型,眼熟它即可,因为时间很长,你要与它陪伴很久很久~
ZeroDivisionError 除零错误 TypeError 类型错误 AttributeError 属性错误 NameError 变量名错误 SyntaxError 语法错误 KeyError 字典键名错误 IndexError 索引错误 IndentationError 缩进错误 TabError 空格和Tab混用 OSError 系统错误 ValueError 传入无效的参数
慢下来,思考一下,Python 开发者为什么要内置异常类型呢?
# 为什么要内置异常类型 如果仅仅使用 try...except 虽然可以捕获异常,但是无法知道具体的异常信息,非常不利于后面处理错误,在 except 后面加上异常类型,就可以捕获到指定的异常信息
举一个变量类型异常的例子吧
try: print(number) except NameError: print('没有定义变量') # 运行结果: 没有定义变量 咱们这里只是举个简单的例子方便大家理解,在编辑器敲写时,number 变量就已经标注红色了
虽然捕获了指定的异常,但是却无法捕获其他的异常,怎么办? Python 开发者前辈早已开发好了方法供我们使用
try: print(number) except (ZeroDivisionError,FileNotFoundError,NameError): print('发生错误') # 运行结果: 发生错误
看到标题是不是在想,wcnb,多么的人性化,学了之后是真的快乐加倍
try: print(number) except Exception: print('发生了错误') # 运行结果: 发生了错误
上述案例,无论是哪种错误,最后输出的结果都是自己先写好的,那可不可以获取不同异常的错误信息呢? 答案是可以的,Python 【yyds】
1. 语法
# try: 代码 except 异常类型 as xx: 代码
2. 举例
# 例1 try: print(number) # as 声明后面的变量名,变量名可以随意命名,意思就是将 Exception 捕获的异常错误信息赋值给了 result, 然后 print 输出就可以了 except Exception as result: print(result) # 运行结果: name 'number' is not defined # 例2 try: print(10 / 0) except Exception as result: print(result) # 运行结果: division by zero
相信 else 方法大家都不陌生,条件判断语句 if esle 写了太多次了,几乎离不开它,那它的作用在异常里面又是怎样的呢?
1. 结构
try: 可能发生错误的代码 except: 如果出现异常执行的代码 else: 没有出现异常要执行的代码 finally: 无论是否出现异常都要执行的代码
2. 举例
try: print('hello') except Exception as result: print(result) else: print('代码正常执行') finally: print('我每次都要执行')
嵌套这个词,几乎前面每次讲一个知识,都会有嵌套,比如: if嵌套语句,for 循环嵌套语句,while循环嵌套语句,列表嵌套,字典嵌套…等等,异常也如它们一样。
# 例1 """ 首先让用户输入年龄,正常的话则继续让用户输入身高,不正常则捕获异常,这个举例有些勉强,为了简单的向大家介绍 异常嵌套,就先这样吧,往后当你工作时,你会常用到的。 """ try: age = int(input('输入年龄:')) try: height = int(input('输入身高(cm):')) except: print('身高输入有误') else: print(f'年龄:{age},身高:{height}') except: print('年龄必须是数字')
如何使用?
__str__
方法,返回错误描述信息raise 异常类对象
2. 举例
class ShorInputError(Exception): def __str__(self): # 返回 如果密码长度 < 3 时要向用户展示错误信息 return f'密码长度不能小于3' try: password = input('输入密码:') if len(password) < 3: """ raise 后面跟一个异常类型的实例,用于抛出此类型的异常,好让 except 捕获异常 也就是说,将代码的控制权移交给 except """ raise ShorInputError() except Exception as result: # result 就是自定义异常类中 str 方法返回的错误信息 print(result)