python的中异常处理机制


Posted in Python onAugust 30, 2018

什么是异常处理

定义:异常处理就是我们在写Python时,经常看到的报错信息,例如;NameError TypeError ValueError等,这些都是异常。

异常是一个事件,改事件会在程序执行过程中发生,影响程序的正常执行,一般情况下,在python中无法处理程序时就会发生异常,异常时Python的一个对象,表示一个错误,当Python脚本发生异常时,我们需要捕获并处理异常,否则程序就会终止执行。

Python 使用被称为 异常 的特殊对象来管理程序执行期间发生的错误。每当发生让 Python 不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个 traceback ,其中包含有关异常的报告。异常是使用 try-except 代码块处理的。 try-except 代码块让 Python 执行指定的操作,同时告诉 Python 发生异常时怎么办。使用了 try-except 代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的 traceback 。

处理ZeroDivisionError异常

下面来看一种导致 Python 引发异常的简单错误。你可能知道不能将一个数字除以 0 ,但我们还是让 Python 这样做吧:

print(5/0)

报错:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print(5/0)
ZeroDivisionError: integer division or modulo by zero

使用 try-except 代码块

当你认为可能发生了错误时,可编写一个 try-except 代码块来处理可能引发的异常。你让 Python 尝试运行一些代码,并告诉它如果这些代码引发了指定的异常,该怎么办。

处理 ZeroDivisionError 异常的 try-except 代码块类似于下面这样:

try:
  print(5/0)
except ZeroDivisionError:
  print("You can't divide by zero!")

# You can't divide by zero!

如果 try-except 代码块后面还有其他代码,程序将接着运行,因为已经告诉了 Python 如何处理这种错误。

使用异常避免崩溃

发生错误时,如果程序还有工作没有完成,妥善地处理错误就尤其重要。这种情况经常会出现在要求用户提供输入的程序中;如果程序能够妥善地处理无效输入,就能再提示用户提供有效输入,而不至于崩溃。

创建一个只执行除法运算的简单计算器:

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
  first_number = input("\nFirst number: ")
  if first_number == 'q':
    break
  second_number = input("Second number: ")
  try:
    answer = int(first_number) / int(second_number)
  except ZeroDivisionError:
    print("You can't divide by 0!")
  else:
    print(answer)

try-except-else 代码块的工作原理大致如下:

Python 尝试执行 try 代码块中的代码;只有可能引发异常的代码才需要放在 try 语句中。有时候,有一些仅在 try 代码块成功执行时才需要运行的代码;这些代码应放在 else 代码块中。 except 代码块告诉 Python ,如果它尝试运行 try 代码块中的代码时引发了指定的异常,该怎么办。

通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也能继续运行,从而能够抵御无意的用户错误和恶意的攻击。

处理 FileNotFoundError 异常

FileNotFoundError 错误是函数 open() 导致的,因此要处理这个错误,必须将 try 语句放在包含 open() 的代码行之前:

filename = 'alice.txt'
try:
  with open(filename) as f_obj:
    contents = f_obj.read()
except FileNotFoundError:
  msg = "Sorry, the file " + filename + " does not exist."
  print(msg)

处理多个文件

def count_words(filename):
  """ 计算一个文件大致包含多少个单词 """
  try:
    with open(filename) as f_obj:
      contents = f_obj.read()
  except FileNotFoundError:
    msg = "Sorry, the file " + filename + " does not exist."
    print(msg)
  else:
    # 计算文件大致包含多少个单词
    words = contents.split()
    num_words = len(words)
    print("The file " + filename + " has about " + str(num_words) + " words.")

filenames = ['a.txt', 'b.txt', 'c.txt', 'd.txt']
for filename in filenames:
  count_words(filename)

异常时保持静默

要让程序在失败时一声不吭,可像通常那样编写 try 代码块,但在 except 代码块中明确地告诉 Python 什么都不要做。 Python 有一个 pass 语句,可在代码块中使用它来让 Python 什么都不要做:

def count_words(filename):
  """ 计算一个文件大致包含多少个单词 """
  try:
    with open(filename) as f_obj:
      contents = f_obj.read()
  except FileNotFoundError:
    pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
Python函数返回不定数量的值方法
Jan 22 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
Python基于百度API识别并提取图片中文字
Jun 27 Python
python调用百度REST API实现语音识别
Aug 30 #Python
python调用百度语音REST API
Aug 30 #Python
python调用百度语音识别api
Aug 30 #Python
python实现ID3决策树算法
Aug 29 #Python
python实现C4.5决策树算法
Aug 29 #Python
python机器学习之KNN分类算法
Aug 29 #Python
深入理解python中sort()与sorted()的区别
Aug 29 #Python
You might like
浅谈php冒泡排序
2014/12/30 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
Python中几种操作字符串的方法的介绍
2015/04/09 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Python提取频域特征知识点浅析
2019/03/04 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
python如何修改文件时间属性
2021/02/05 Python
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
母亲节演讲稿范文
2014/01/02 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
机关保密承诺书
2014/06/03 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
2016公司年会通知范文
2015/04/25 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers