Python黑帽编程2.7 异常处理

异常是个很宽泛的概念,如果程序没有按预想的执行,都可以说是异常了。遇到一些特殊情况没处理会引发异常,比如读文件的时候文件不存在,网络连接超时。程序本身的错误也可以算作异常,比如把字符串当整数来处理,拼写错误。

不论是系统还是框架,都会对基本异常进行分类,比如IO异常,内存溢出等等。很多时候,针对特有的业务,我们也可以自定异常。

下面我们先看一个引发异常的例子:

Print 'hello'

这个例子很简单,我们将print的首字母大写。这会引发一个错误:

图2

我们可以观察到有一个SyntaxError被引发,并且检测到的错误位置也被打印了出来。捕获错误,打印错误信息,这本身就是一种异常处理。那么我们如何在代码中处理异常呢?

2.7.1 try ….except

例如我们用如下代码去打开文件:

open('abc.txt','r')

但是要打开的文件并不存在,这个时候程序就会抛出异常,如下图所示:

图3

我们看到抛出的错误为 IOError,那么我们可以使用如下的代码来处理这个异常。

try:

open('abc.txt','r')

except IOError,msg:

print msg

运行结果如下:

图4

我们把所有可能引发错误的语句放在try块中,然后在except从句中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

例如:

try:

open('abc.txt','r')

except IOError,msg:

print msg

except:

print 'other erro'

如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。

2.7.2 抛出异常

我们可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。我们可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。

我们先看示例代码:

#!/usr/bin/python

class ShortInputException(Exception):

'''A user-defined exception class.'''

def __init__(self, length, atleast):

Exception.__init__(self)

self.length = length

self.atleast = atleast

try:

s = raw_input('Enter something --> ')

if len(s) < 3:

raise ShortInputException(len(s), 3)

# Other work can continue as usual here

except EOFError:

print '\nWhy did you do an EOF on me?'

except ShortInputException, x:

print 'ShortInputException: The input was of length %d, \

was expecting at least %d' % (x.length, x.atleast)

else:

print 'No exception was raised.'

这段代码中我们首先自定义了一个ShortInputException类,它继承自Exception类,构造函数接受两个参数输入字符串的长度和最小长度。接下来代码中,我们获取用户输入,判断长度是否小于3,如果小于3触发ShortInputException。我们从终端启动这个脚本,运行结果如下:

图5

2.7.3 try..finally

当我们需要不管是否有异常,都要执行某段代码的时候,就需要finally出场了。看下面的示例:

def test1():

try:

print('to do stuff')

raise Exception('hehe')

print('to return in try')

return 'try'

except Exception:

print('process except')

print('to return in except')

return 'except'

finally:

print('to return in finally')

return 'finally'

test1Return = test1()

print('test1Return : ' + test1Return)

在 try 中 raise一个异常,就立刻转入 except 中执行,在except 中遇到 return 时,就强制转到 finally 中执行, 在 finally 中遇到 return 时就返回。运行结果如下:

图6

2.7.9 小结

本节我们学习了Python中基本的异常处理,和自定义异常的方法。

下一节我们学习套接字编程。

2.7节《套接字编程》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单网络安全”—>”Python黑帽编程进入即可。

由于教程仍在创作过程中,在整套教程完结前,感兴趣的同学请关注我的微信订阅号(xuanhun521,下方二维码),我会第一时间在订阅号推送图文教程和视频教程。问题讨论请加qq群:Hacking (1群):303242737   Hacking (2群):147098303。

转载于:https://www.cnblogs.com/xuanhun/p/5756033.html

Python黑帽编程2.7 异常处理相关推荐

  1. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  2. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if -..else 先上一段代码: #!/usr/bin/python # - ...

  3. Python黑帽编程 3.1 ARP欺骗

    Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...

  4. PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)

    上一节(<4.1 SNIFFER(嗅探器)之数据捕获(上)>)中, 我们讲解了通过Raw Socket的方式来编写Sniffer的基本方法. 本节我们继续来编写Sniffer,只不过使用现 ...

  5. Python黑帽编程2.8 套接字编程

    Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...

  6. python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解

    VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLA ...

  7. Python 黑帽编程1.2 基于VS Code构建Python开发环境 --转载---玄魂工作室

    0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Python>一书,为了解决 ...

  8. Python黑帽编程2.5 函数

    Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...

  9. Python黑帽编程-ARP之一

    前言: 在知乎上看见这篇文章,正好对网络安全也有些兴趣,于是动手实践一番. 本文作者:微寒 版权声明:转载请私信,并注明原文地址 本文地址:http://blog.csdn.net/supercool ...

最新文章

  1. linux创建一个交换分区,如何创建linux交换分区
  2. Learn OpenGL (六):坐标系统
  3. linux驱动模型开发——linux platform总线机制讲解与实例开发
  4. 第13章:项目合同管理--章节真题
  5. java 连接sqlitle_ASP连接SQL2005数据库连接代码
  6. Bootloader概述
  7. 关于ShopEx的二次开发的目录结构及各文件功能
  8. 数数题(计数类 DP)做题记录
  9. 计算机面试的时候写过的代码,程序员悲催瞬间:来之不易的美团面试,我尽然挂了(还原真实场景)...
  10. ExtJs + .NET MVC 不分页处理大数据
  11. class根据状态 vue_搞懂并学会运用 Vue 中的无状态组件
  12. 【Python】【有趣的模块】【systimeos】
  13. 自己动手写ORM框架
  14. 用友超客:社交化业务就是要化繁为简
  15. 学习_010_Hadoop权威指南
  16. java可以进行爬虫吗_java能写爬虫程序吗
  17. ROS中的AGV与ROS_CONTROL学习
  18. css样式背景图片设置透明度,css如何设置背景图片的透明度
  19. [python]《天龙八部》文本处理
  20. 转载:optparse模块OptionParser学习

热门文章

  1. linux tomcat守护_linux 设置tomcat为守护进程教程
  2. 求1到100的奇数之和c语言,C语言实现1到100的和奇数与偶数和
  3. OpenCV-Python实战(16)——人脸追踪详解
  4. java while循环_Java while循环
  5. photorec_如何在Linux / Ubuntu中使用PhotoRec恢复已删除的文件
  6. scala 函数中嵌套函数_Scala中的VarArgs函数和@varargs批注
  7. Java ClassNotFoundException – java.lang.ClassNotFoundException
  8. 抽象类的继承/纯虚函数的实现
  9. viewport就是这回事
  10. Activity管理笔记