Python实用指南:异常处理

共 2857字,需浏览 6分钟

 ·

2021-02-28 21:26

欢迎关注 “小白玩转Python”,发现更多 “有趣”


每个程序员的梦想都是编写一个可以平稳运行的程序,然而通常情况并非如此,我们的程序经常会遇到错误,一旦出现错误,代码的执行就会停止。


意外的情况或条件可能会导致错误。Python 将这些情况视为异常,并根据异常的类型引发不同类型的错误。


ValueError、 TypeError、 AttributeError 和 SyntaxError 是这些异常的一些示例。好消息是 Python 还提供了处理异常的方法。


考虑下面的代码,它要求用户输入一个数字并打印该数字的平方。

a = int(input("Please enter a number: "))print(f'{a} squared is {a*a}')

只要输入是一个数字,它就可以正常工作。然而,如果用户输入一个字符串,python 将引发一个 ValueError:

我们可以在代码中实现一个 try-except 块来更好地处理这个异常。例如,我们可以向用户返回一个更简单的错误消息,或者请求他们提供另一个输入。

try:   a = int(input("Please enter a number: "))   print(f'{a} squared is {a*a}')except:   print("Wrong input type! You must enter a number!")

在上述情况下,代码会更清楚地告知用户有关错误的信息。


如果由于 try 块中的代码引发了异常,则执行将继续使用 except 块中的语句。因此将由程序员决定如何处理异常。


普通的 try-except 块将捕获任何类型的错误。但是,我们可以更具体一些。例如,我们可能只对特定类型的错误感兴趣,或者希望以不同的方式处理不同类型的错误。


可以用 except 语句指定错误类型。考虑下面的代码,它要求用户从列表中输入一个数字。然后,它根据输入从字典返回一个名称。

dict_a = {1:'Max', 2:'Ashley', 3:'John'}number = int(input(f'Pick a number from the list: {list(dict_a.keys())}'))

如果用户输入一个不在给定列表中的数字,我们将得到一个 KeyError。如果输入不是一个数字,我们将得到一个 ValueError。我们可以使用两个语句来处理这两种情况。

try:   dict_a = {1:'Max', 2:'Ashley', 3:'John'}   number = int(input(f'Pick a number from the list:    {list(dict_a.keys())}'))   print(dict_a[number])except KeyError:   print(f'{number} is not in the list')except ValueError:   print('You must enter a number!')

Python 还允许引发自己的异常。它类似于自定义默认异常。Raise 关键字和错误类型可以用于创建自己的异常。

try:   a = int(input("Please enter a number: "))   print(f'{a} squared is {a*a}')except:   raise ValueError("You must enter a number!")

下面是非数字输入情况下的错误消息。

ValueError: You must enter a number!

让我们再举一个例子,说明如何在函数中使用 try-except 块。


函数的作用是: 返回数字列表的平均值。

a = [1, 2, 3]def avg_value(lst):   avg = sum(lst) / len(lst)   return avgprint(avg_value(a))2

如果我们向这个函数传递一个空列表,它将给出一个 ZeroDivisionError,因为空列表的长度为零。


我们可以在函数中实现一个 try-except 块来处理此异常。

def avg_value(lst):   try:      avg = sum(lst) / len(lst)      return avg   except:      print('Warning: Empty list')      return 0

对于空列表,函数将打印一个警告并返回0。

a = []print(avg_value(a))Warning: Empty list0

Try 和 except 块用于处理异常。assert 用于确保条件符合函数的需求。


如果 assert 为 false,则函数不会继续。因此,assert 可以作为防御性编程的一个例子,确保一切都按照预期进行。


让我们在 av_value 函数中实现 assert,确保列表不是空的。

def avg_value(lst):   assert not len(lst) == 0, 'No values'   avg = sum(lst) / len(lst)   return avg

如果列表的长度为零,则函数立即终止,否则,函数将继续运行直到结束。


如果 assert 语句中的条件为 false,则会引发 AssertionError:

a = []print(avg_value(a))AssertionError: No values

assert 对于发现代码中的错误非常有用,因此,它们可以用来支持测试。


总结


我们已经介绍了如何在代码中实现 try,except 和 assert。这在许多情况下都很有用,为程序员提供了对代码的更多控制和监督,使得他们能很好地发现和处理异常。


·  END  ·

个人微信(如果没有备注不拉群!
请注明:地区+学校/企业+研究方向+昵称



下载1:何恺明顶会分享


AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析


下载2:终身受益的编程指南:Google编程风格指南


AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!



下载3 CVPR2020

AI算法与图像处公众号后台回复:CVPR2020即可下载1467篇CVPR 2020论文


觉得不错就点亮在看吧

浏览 13
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报