下面是学习的网址:
【Python+爬虫】
16、捕捉异常try&except语句的一些问题
1)一些常见的异常类型
IndexError | 索引错误 | ZeroDivisionError | 除零错误 |
FileNotFindError | 找不到文件错误 | TypeError | 类型错误 |
KeyError | 键错误 | ValueError | 值错误 |
IndentationError | 缩进错误 | ImportError | 导入模型错误 |
ArithmeticError | 计算错误 | SyntaxError | 语法错误 |
AttributeError | 属性错误 | ...... | ...... |
对于我这个初学者,出现最多的应该是SyntaxError语法错误了,不是忘记冒号,就是忘记语法应该怎么用了。
2)try&except的使用
我也贴上我自己有注释的代码:
try: # 下面缩进写可能会出现错误的地方user_weight = float(input("请输入您的体重(单位:斤):"))user_height = float(input("请输入您的身高(单位:厘米):"))user_BMI = (user_weight / 2) / ((user_height / 100) ** 2)
except ValueError: # except后面直接加可能出现的错误类型,这个错误类型必须显示为一个独特的颜色,这里为值错误类型print("输入不为合理数值,请重新运行程序,并输入正确的数字。")
except ZeroDivisionError: # 此处为除零错误类型print("身高不能为零,请重新运行程序,并输入正确的数字。")
except:print("发生了未知错误,请重新运行程序。")
else:print("您的BMI值为" + str(user_BMI)) # 都没有错误的话输出BMI值
finally:print("程序运行结束")# 无论是否有错误,最终输出都会打印这一句话
对于第三个except后面没有跟错误类型,PyCharm是会有警告的,但是没有影响,因为它默认后面是需要填一个错误类型的。
17、测试Bug的一些问题
1)assert断定函数的使用
"assert + 布尔值表达式",用这种方法来测试用例,但是缺点是一行报错就会中止(AssertionError断言错误),后面的用例也就不能测试了。
2)unittest单元测试库的一些问题
下图是unittest。TestCase类的常见测试方法:
!!!这一部分实在是太难了,建议多看看原视频,我贴上UP主的代码。
# 这是实现代码
class ShoppingList:"""初始化购物清单,shopping_list是字典类型,包含商品名和对应价格例子:{"牙刷": 5, "沐浴露": 15, "电池": 7}"""def __init__(self, shopping_list):self.shopping_list = shopping_list"""返回购物清单上有多少项商品"""def get_item_count(self):return len(self.shopping_list)"""返回购物清单商品价格总额数字"""def get_total_price(self):total_price = 0for price in self.shopping_list.values():total_price += pricereturn total_price
# 这是测试代码
'''
注意:此文件是针对以下类的测试文件。
你可以在此文件同一文件夹下新建shopping_list.py,并复制以下内容到该文件:class ShoppingList:"""初始化购物清单,shopping_list是字典类型,包含商品名和对应价格例子:{"牙刷": 5, "沐浴露": 15, "电池": 7}"""def __init__(self, shopping_list):self.shopping_list = shopping_list"""返回购物清单上有多少项商品"""def get_item_count(self):return len(self.shopping_list)"""返回购物清单商品价格总额数字"""def get_total_price(self):total_price = 0for price in self.shopping_list.values():total_price += pricereturn total_price
'''import unittest
from shopping_list import ShoppingListclass TestShoppingList(unittest.TestCase):def setUp(self):self.shopping_list = ShoppingList({"纸巾": 8, "帽子": 30, "拖鞋": 15})def test_get_item_count(self):self.assertEqual(self.shopping_list.get_item_count(), 3)def test_get_total_price(self):self.assertEqual(self.shopping_list.get_total_price(), 55)
要测试的时候需要在终端输入: python -m unittest 回车。
此处的shopping_list是实现代码的文件名,Shoppinglist是需要测试的对象,如定义的函数等。
为了避免后面重复编写相同的开头测试语句,在定义类的第一个函数运用了setUp(self)。