我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python自动化运维之异常处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python自动化运维之异常处理

1、异常
异常就是非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。
2、异常类型
通用异常类型表

异常描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
LookupError无效数据查询的基类
IndexError序列中没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak  reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

Exception类:是通用异常基类下列异常类均继承于Exception类,python解析器会自动将通用异常类型名称放在内建命名空间中,所以当使用通用异常类型时,不需要import exceptions模块。
3、异常处理
3.1 触发异常raise
raise关键字:手动抛出一个通用的异常类型(Exception),类似Java中的throw语句。raise关键字后跟异常的名称,异常名称能够标识出异常类的对象。执行raise语句时,python会创建指定异常类的对象,还能够指定对异常对象进行初始化的参数,参数也可以为由若干参数组成的元组。
注意:一旦执行raise语句,程序就会被终止。
格式:raise [exceptionType[,argument][,traceback]]

def testRaise(number):
    if number < 1:
        raise ValueError('Invalid value') #或者 raise ValueError,'Invalid value'
testRaise(0)

traceback:这个参数用于追踪异常对象,一般很少使用。
这样就可以触发一个异常,并且接收异常信息。
3.2 传递异常
当你捕获到异常之后又希望再次的触发异常只需要使用不带任何参数的raise关键字。

import os
try:
    openFile = open('notExistsFile.txt','r')
    fileContent = openFile.readlines()
except IOError:
    print('File not Exists'
    if not os.path.exists('notExistsFile.txt'):
        raise
except:
    print('process exception'

异常会在捕获之后再次触发同一个异常。
3.3 assert语句触发异常
assert语句根据后面的表达式的真假来控制程序流。若为True,则往下执行。若为False,则中断程序并调用默认的异常处理器,同时输出指定的提示信息。

格式:assert expression,'information'

例如:

def testAssert(x):
    assert x < 1,'Invalid value'
testAssert(1)
print('Valid value'

执行结果:

AssertionError: Invaild value

3.4 捕获异常try..except..else
注意:except子句的数量没有限制,但使用多个except子句捕获异常时,如果异常类之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行。
格式:

try:
    可能触发异常的语句块
except [exceptionType]:
    捕获可能触发的异常[可以指定处理的异常类型]
except [exceptionType][,date]:
    捕获异常并获取附加数据
except:
    没有指定异常类型,捕获任意异常
else:
    没有触发异常时,执行的语句块

4、try的工作原理
执行一个try语句时,python解析器会在当前程序流的上下文中作标记,当出现异常后,程序流能够根据上下文的标记回到标记位,从而避免终止程序。
1. 如果try语句执行时发生异常,程序流跳回标记位,并向下匹配执行第一个与该异常匹配的except子句,异常处理完后,程序流就通过整个try语句(除非在处理异常时又引发新的异常)。
2. 如果没有找到与异常匹配的except子句(也可以不指定异常类型或指定同样异常类型Exception,来捕获所有异常),异常被递交到上层的try(若有try嵌套时),甚至会逐层向上提交异常给程序(逐层上升直到能找到匹配的except子句。实在没有找到时,将结束程序,并打印缺省的错误信息)。
3. 如果在try子句执行时没有发生异常,python将执行else语句后的语句(可选),然后控制流通过整个try语句。 

try:
    openFile = open('notExistsFile.txt','r')
    fileContent = openFile.readlines()
except IOError:   
    print('File not Exists')        # 执行
except: 
    print('process exception')      # 不执行
else:
    print('Reading the file')       # 不执行

执行结果:

In [157]: %run testError.py
File not Exists

嵌套try:

try:
    try:
        openFile = open('notExistsFile.txt','r')
        fileContent = openFile.readlines()
    except IOError:
        print('File not Exists')      #执行
except:
    print('process exception')        #不执行 
else: 
    print('Reading the file')         #执行

执行结果:

In [159]: %run testError.py
File not Exists
Reading the file

5、捕捉多个异常
方法一:指定一个通用异常,可以捕获多个不同的包含在Exception类中的异常类。

try:
    语句块
except Exception:
    语句块

方法二:在一个except子句后将多个异常作为元组元素列出。

try:
    语句块
except (IOError,ValueError): 
    语句块

方法三:except子句后不带任何异常名称,捕获所有异常

try:
    语句块
except: 
    语句块

6、try..finally语句
无论try语句块中是否触发异常,都会执行finally子句中的语句块,因此一般用于关闭文件或关闭因系统错误而无法正常释放的资源。比如文件关闭,释放锁,把数据库连接返还给连接池等。

import os
def write_test(fileName,content_iterable):
    try:
        pwd = open(fileName,'w')
        for key,value in content_iterable.items():
            pwd.write(key+'\t'+value+'\n')  #传入String类型参数同时加入换行符
    finally:
        pwd.close()
if __name__ == '__main__':
    fileName = '/usr/local/class="lazy" data-src/pyScript/fileOperation.txt'
    dic = {'name':'Jmilk','age':'23','city':'BJ'}
    if os.path.exists(fileName):
        write_test(fileName,dic)
    else:print('File not exist!')

注意:try..finally与try..except 是可以同时使用的。

In [3]: try:
   ...:     raise
   ...: except Exception:
   ...:     print('error')
   ...:     raise
   ...: finally:
   ...:     print('success')
   ...:
error
success
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-530db52949e7> in <module>()
      1 try:
----> 2     raise
      3 except Exception:
      4     print('error'
      5     raise
TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType


NOTE:try…finally 的意义在于,就是我们在 try 代码块中执行了 return 语句,但是仍然会继续执行在 finally 中的代码块,所以我们一般用作处理资源的释放。
7、自定义异常
通过(直接或简介)继承Exception类来创建一个自定义异常类,自定义的异常类只能通过raise关键字来手动触发。

class testError(Exception):    #直接集成Exception类
    def __init__(self,arg):
        self.args = arg
try:
    raise testError('Just test')
except testError,info:
    print info.args

执行结果:

In [52]: %run test.py
('J', 'u', 's', 't', ' ', 't', 'e', 's', 't')

with..as触发异常自动关闭资源
在使用类文件的流对象时,都需要单独的调用close()来关闭资源。with..as语句能够实现在with语句块执行完后,自动的关闭文件。如果with语句块中触发异常,会调用默认的异常处理器处理,而且文件仍然能够正常关闭。

import os
def testWith(fileName):
    try:
        with open(fileName,'r+') as pwd:
            pwd.readlines()
            print 2/0
    except Exception:
            print('File closed:',pwd.closed  #判断文件是否关闭
if __name__ == '__main__':
    if os.path.exists('/usr/local/class="lazy" data-src/pyScript/fileOperation.txt'):
        testWith('/usr/local/class="lazy" data-src/pyScript/fileOperation.txt')
        print('continue')

执行结果:

In [17]: %run test.py
File closed: True    #没有call close()函数,文件仍然自动关闭。
continue

7、as获取异常信息
每个异常都会有一定的描述信息,可以通过as关键字来获取。但是这种异常信息并不适合一般用户阅读,所以会使用自定义的异常信息。但是仍然会将原有的异常信息保留起来,用于后期的异常分析。

try:
    try:
        openFile = open('notExistsFile.txt','r')
        fileContent = openFile.readlines()
    except (IOError,ValueError) as info:  #或者except (IOError,ValueError),info: 
        print info
except:
    print('process exception')
else:
    print('Reading the file')

执行结果:

In [164]: %run testError.py
[Errno 2] No such file or directory: 'notExistsFile.txt'

异常参数
也可以使用异常参数作为输出的异常信息参数,来获取异常信息。并且异常参数中包含有异常信息、错误数字、错误位置等属性。

try:
    try:
        openFile = open('notExistsFile.txt','r')
        fileContent = openFile.readlines()
    except (IOError,ValueError),info:
        print dir(info)
        print info.args
except:
    print('process exception')
else:
    print('Reading the file')

执行结果:

In [44]: %run test.py
['__class__', '__delattr__', '__dict__', 
'__doc__', '__format__', '__getattribute__', '__getitem__', 
'__getslice__', '__hash__', '__init__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__setstate__', 
'__sizeof__', '__str__', '__subclasshook__', '__unicode__', 'args', 
'errno', 'filename', 'message', 'strerror']
(2, 'No such file or directory')
Reading the file

8、traceback追踪异常
使用traceback追踪异常的时候,需要import traceback模块。traceback模块可以有效的帮助查看异常的详细信息。
注意:若希望获取异常的详细信息,却又不会终止程序的执行,可以在except子句中使用

tarceback.print_exc()函数。 
tarceback.print_exc(): 
print_exc(limit=None, file=None) 
Shorthand for ‘print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)’. 
(In fact, it uses sys.exc_info() to retrieve the same information in a thread-safe way.)

输出sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file等异常信息,实际上是以线程安全的方式去使用sys.exc_info()函数来获取相同的信息。

import traceback
try:
    openFile = open('notExistsFile.txt','r')
    fileContent = openFile.readlines()
except IOError as info:
    print('File not Exists')
    print(info)
    traceback.print_exc()
    print('continue')
except:
    print('process exception')
else:
    print('Reading the file')

执行结果:

In [38]: %run test.py
File not Exists
[Errno 2] No such file or directory: 'notExistsFile.txt'
Traceback (most recent call last):
  File "/usr/local/class="lazy" data-src/pyScript/test.py", line 5, in <module>
    openFile = open('notExistsFile.txt','r')
IOError: [Errno 2] No such file or directory: 'notExistsFile.txt'
continue


异常信息的重定向:如果希望将异常的信息保存在一个指定的文件中,以供后期分析。可以使用下面的方法:

import traceback
try:
    with open('notExistsFile.txt','r') as openFile:
        fileContent = openFile.readlines()
except IOError:
    with open('errorLog','w+') as errorInfo:
        traceback.print_exc(file=errorInfo)
    print('continue')
except:
    print('process exception')
else:
    print('Reading the file')

执行结果:

In [61]: %run test.py
continue
In [62]: cat errorLog
Traceback (most recent call last):
  File "/usr/local/class="lazy" data-src/pyScript/test.py", line 5, in <module>
    with open('notExistsFile.txt','r') as openFile:
IOError: [Errno 2] No such file or directory: 'notExistsFile.txt'

sys.exc_info()获取异常信息
traceback.print_exc()函数实际上是call sys.exc_info()

import sys  
try:  
    a=b  
    b=c  
except:  
    info=sys.exc_info()  
    print(info[0],":",info[1])

执行结果:

In [65]: %run test.py
<type 'exceptions.NameError'> : name 'b' is not defined

异常处理用于处理程序错误之外,还有许多应用的地方。如关闭资源、平台兼容、模块导入等。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python自动化运维之异常处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python自动化运维之异常处理

1、异常异常就是非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程
2023-01-31

Python自动化运维:Django之U

准备首先新建一个Django 项目django-admin startproject urlTest进入manage.py所在目录后./manage.py startapp app1./manage.py startpap app2此时我们
2023-01-31

Python自动化运维

psutil库获取系统运行的进程和系统利用率[root@serverc ~]# yum -y install python2[root@serverc ~]# yum -y install python2-psutil[root@serve
2023-01-31

Python自动化测试之异常处理机制怎么实现

这篇文章主要介绍“Python自动化测试之异常处理机制怎么实现”,在日常操作中,相信很多人在Python自动化测试之异常处理机制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python自动化测试之异
2023-07-02

Python 自动化运维 IPy

1.功能 对IP进行处理的模块 2.输出一个网段内的所有IP反向解析,IP类型,IP转换网段转换strNomal(0)   无返回strNomal(1)   后缀strNomal(2)   十进制strNomal(3)   lastIPIP
2023-01-31

Python 自动化运维 nmap

1.对端口扫描,查看端口状态  2.实例import sysimport nmapscan_row = []    input_data = raw_input("PLEASE INPUT: ")scan_row = input_data.
2023-01-31

Python 自动化运维 difflib

1.功能:对比文件差异 2.对比两个字符的差异生成对比HTML格式文档,将结果输入到HTML文件,用浏览器打开单文件对比多文件对比  输出格式 ( [ 匹配 ],[ 不匹配 ],[ 错误 ] )
2023-01-31

Python 自动化运维1-Python

Python安装1.下载Python2.7源安装包:  wgethttps://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz2.解压安装包:  tar -zxvf Python-
2023-01-31

Python 自动化运维 XlsxWri

1.操作Excel模块  2.实例import xlsxwriterworkbook = xlsxwriter.Workbook('demol.xlsx')     ##实例一个对象worksheet = workbook.add_work
2023-01-31

Python之异常处理

错误包括语法错误和逻辑错误异常是程序运行时发生错误的信号,解释器追踪程序,根据错误抛出的异常。常用的异常:AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是
2023-01-30

Python自动化运维:Django M

QuerySet可切片使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET 子句。>>> Entry.objects.all()[:5]      # (LIMIT 5)>>> Entry.ob
2023-01-31

Python 之异常处理

一 错误和异常•错误分两种:1、语法错误1 #!/usr/bin/env python2 # -*- coding:utf-8 -*-3 # 举列4 print('hello world' # 少)5 6 def test: # 少()
2023-01-30

python自动化运维之Telnetlib的具体使用

目录前言:1.导入telnetlib库可以直接使用。2.配置服务器、用户名、密码,cmd命令等3.功能函数前言: 远程连接中兴设备(系统使用的中兴网卡)时使用的事Telnet连接,连接时设有二次验证,每次输入用户名密码和执行命令是个繁琐的过
2022-06-02

自动化运维工具Ansible之Pytho

Ansible 的Python API使用起来相当简单快捷,使用API可以将某些运维操作封装成一个带有WEB界面的操作,免去了每次执行某个操作的时候都需要SSH运行Ansible命令。官方给出的一个简单示例:import ansible.r
2023-01-31

常用的Python自动化运维工具有哪些

常用的Python自动化运维工具有:Ansible:用于自动化配置、部署和编排任务的工具,可以通过SSH协议远程管理主机。Fabric:基于SSH协议的远程部署和系统管理工具,可以在多个远程主机上执行命令。SaltStack:基于Pyt
2023-10-22

Python自动化运维Django入门

随着IT运维技术日益更新,近几年运维自动化越来越火,而且学习python的人非常的火爆,尤其是python自动化运维开发,得到了很多前辈的推崇。这里我也记录一下以前学习Django的一点点心得和方法,方便以后自己查阅,如果能帮助初学者是最好
2023-01-31

Python 自动化运维3-Print输

Python语言之Print输出方法Print 输出方法:'-' 表示左对齐'+' 表示正号'0' 表示用0填充'f' 前指定一个最小宽度'.' 指定小数点后的精度格式:% [flag][width][.precision]typecode
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录