发布时间:2020/07/11 作者:天马行空 阅读(1406)
1、Python两种错误
Python程序中常出现的是两类错误:语法错误和异常。
1.1、语法错误
不符合Python语法的错误就称作语法错误。有语法错误的程序运行后不能执行,通常会得到SyntaxError的提示,同时会输出在这段程序中检测到的语法错误类型及其所在行号。
1.2、异常
没有语法错误,但在执行过程中,却发生了错误,这时检测到的错误被称为“异常”。
大多数异常不会被解释器自动处理,此时程序就会终止运行,并输出错误信息,错误信息中会给出遇到的异常类型。
二、Python常见异常
2.1、NameError异常
当程序中试图使用一个未被赋值的变量时就会引发NameError。
new = old + 1 print(new)
2.2、TypeError异常
把不同类型的数据进行拼接运算的时候通常会发生TypeError异常。
old = "1" new = old + 1 print(new)
2.3、ModuleNotFoundError异常
使用import导入模块的时候,可能会碰到两种情况:一种是我们输入的模块名字不正确,是个不存在的模块;另一种是我们需要导入的模块虽然存在,但是没有提前下载安装到计算机上。
当出现这两种情况的时候,Python就会报错ModuleNotFoundError。我们需要检查是不是模块名写错了,如果确信无误,就需要排查计算机环境中是否没有安装代码需要import的模块。
import Pandas
2.4、KeyError异常
KeyError异常也是Python常见的异常类型,这种异常经常发生在使用诸如字典这样的键值类型的时候。当试图读取字典中不存在的键时程序会抛出KeyError。
have_list = {"tomato": 5, "oil": 2}
print(have_list["egg"])
2.5、ValueError异常
当传入无效的参数时,就会抛出ValueError异常。
print(int("1")) print(int("一"))
2.6、IndexError异常
当程序试图对序列(例如列表、元组)进行索引操作时,如果索引超出了序列取值范围,就会抛出IndexError。
number_list = [1, 2, 3] print(number_list[3])
2.7、OSError异常
当程序中发生与操作系统相关的异常时,例如找不到程序中指定的文件等,就会抛出OSError。
2.8、AttributeError 异常
AttributeError异常是在使用Python的类对象时会遇到的一个错误。
比如:字典中,并没有append()方法。如果你试图用append()为字典追加元素,就会发生AttributeError异常
my_dict = {"Lily": 18, "Bob": 20} my_dict.append("Tom")
三、Python异常处理
当代码发生错误或异常时,Python程序就会中止,这往往不符合我们的需求。
有时候,希望代码在发生某些状况的时候,还可以“顽强”的继续完成;
有时候,我们希望在程序终止之前,将代码千辛万苦已经完成的部分工作结果保存一下。
3.1、try-except-finally语句
在while循环中,首先执行try后面的语句,这些语句可能会发生异常。一旦发生异常,try代码块中的后续代码将不被执行,并把这个异常抛出来。如果这个异常类型与某一个except关键字后的异常类型匹配,那么异常将由这个except语句捕获,然后执行except代码块中的代码。
如果不出现异常,try语句就会全部执行完,而任何的except代码块都不会被执行。
最后,不管有没有发生异常,都会执行finally代码块中的语句。
while True: try: number = float(input("请输入一个数字:")) print("它的倒数是:",1/number) # 如果输入正确的倒数,则程序结束 break except ValueError: print("输入的不是有效的数字,请重新输入。") except ZeroDivisionError: print("输入的是0,它没有倒数,请重新输入。") finally: print("这个程序的功能是求数字的倒数。")
注意:
a、很多时候我们不知道程序可能会发生什么样的异常,这时我们可以省略 except 后面的异常类型,也就是直接写成 except: 。这时,这个 except 会捕捉所有的异常类型。
b、很多时候我们不需要使用finally做最后的处理,这时候可以把finally语句省略。
练习:
while True: try: num = input('请输入一个数字:') num = float(num) print(num**2) break except ValueError: print('你输入的不是一个数字,请重新输入')
总结:
语法错误:代码不符合Python的语法规定而导致的错误。
异常:因为代码逻辑而导致的错误。
Bug:计算机编码中错误的统称。
Debug:发现和解决程序中Bug的过程。
对异常的处理,采用try-except-finally的结构。
练习:检查还缺少哪些材料
ingredients = ['tomato','egg','oil','salt','Onion'] ingredients_have = {'tomato':'five','oil':'enough','salt':'enough'} ingredients_buy = [] for i in ingredients: try: ingredients_have[i] except KeyError: ingredients_buy.append(i) print('还需要准备这些:{}'.format(ingredients_buy))