异常执行路径

代码参考


try:
    text = input('请输入 --> ')
except EOFError:
    print('为什么你按下了EOF?')
except KeyboardInterrupt:
    print('你取消了操作')
except Exception as e:   # 当前面的异常都没匹配到,万能异常
    print(e)
else:
    print('你输入了 {}'.format(text))
finally:
    print("程序结束...")    

try–>代码报错–>except–>finally

try–>代码正常–>else ->finally

常见异常模拟

参考

- 直观体验
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> d={}
>>> d['name']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'
>>>
>>> arr=[]
>>> arr[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

>>> int(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> int('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a'

###################################
- IndexError
d = ["mao", 'tai']
try:
    d[10]
except IndexError, e:
    print e
###################################

- KeyError
d = {'k1':'v1'}
try:
    d['k20']
except KeyError, e:
    print e
###################################

- ValueError
s1 = 'hello'
try:
    int(s1)
except ValueError, e:
    print e
###################################
异常 原因
AttributeError 赋值失败: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError 文件操作失败: 输入/输出异常;基本上是无法打开文件
ImportError 导入失败: 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 缩进错误: 语法错误(的子类) ;代码没有正确对齐
IndexError 下标越界: 比如当x只有三个元素,却试图访问x[5]
KeyError 字段k错误: 字典里k不存在
KeyboardInterrupt Ctrl+c被按下
EOFError Ctrl+d被按下
NameError 变量不存在: 使用一个还未被赋予对象的变量
SyntaxError 代码形式错误
TypeError 对象类型错误: 传入对象类型与要求的不符合
ValueError 对象的值错误: 传入一个调用者不期望的值,即使值的类型是正确的
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

异常应用

  • 输入的必须是数字
  • 输入的必须是y 或 n
  • 输入几次机会
- 要求输入一个数字
while True:
    try:
        num = raw_input("input a int num: ")
        num = int(num)
    except ValueError:
        print "pls enter a int num"

- 要求输入的值在y 或 n之间
while True:
    try:
        op = raw_input("y/n >")
        op = op.lower()
        if op in ['y','n']:
            print "input correct"
    except Exception as e:
        print "pls input y or n"

- 程序启动后,提示输入, 仅输出n/N或nxx程序结束
while True:
    try:
        op = raw_input("Again?[y] > ")
        op = op.lower()
        if op and op[0]=="n":
            break
    except(KeyboardInterrupt,EOFError):
        print("pls input a y/n")

- 猜一个数字,如果和内置的值相等,则退出,最多3次猜测机会.

    直接回车,不算浪费机会
    ctrl+c无法退出
    输入的必须是数字,如果不是数字则报错

    已上这三种异常均需要扑捉并提示try again

count = 1
while True:
    try:
        if (int(input("guess a num > "))) == 100:
            print("correct")
            break
        if count == 3:
            print("th coreect count is 100")
            break
        else:
            print("try again")
            count += 1
    except(KeyboardInterrupt, IOError, ValueError):
        print "pls input a count"

[py]py异常应用的更多相关文章

  1. linux安装软件时/usr/lib/python2.7/site-packages/urlgrabber/grabber.py文件异常

    linux安装软件时,经常出现以下异常信息 Traceback (most recent call last): File , in <module> main() File , in m ...

  2. [py]py里的isinstance判断实例来源(含父类)

    Isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. ...

  3. [py]py常用模块小结

    - python md5校验: https://blog.csdn.net/linda1000/article/details/17581035 import hashlib hashlib.md5( ...

  4. [py]软件编程知识骨架+py常见数据结构

    认识算法的重要性 - 遇到问题? 学完语言,接到需求,没思路? 1.学会了语言,能读懂别人的代码, 但是自己没解决问题的能力,不能够把实际问题转换为代码,自己写出来.(这是只是学会一门语言的后果),不 ...

  5. python之模块py_compile用法(将py文件转换为pyc文件)

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件):二进制文件,是由py文件经过编译后 ...

  6. Python各种扩展名(py, pyc, pyw, pyo, pyd)区别

    扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名 pyw pyw是另一种源码扩展名,跟py唯一的区别是 ...

  7. Pytest学习(六) - conftest.py结合接口自动化的举例使用

    一.conftest.py作用 可以理解成存放fixture的配置文件 二.conftest.py配置fixture注意事项 pytest会默认读取conftest.py里面的所有fixture co ...

  8. 如何反编译Python写的exe到py

    参考链接: https://blog.csdn.net/qq_44198436/article/details/97314626?depth_1-utm_source=distribute.pc_re ...

  9. python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中

    使用sys.excepthook函数进行全局异常的获取. 1. 使用MessageDialog实现异常显示: 2. 使用logger把捕获的异常信息输出到日志中: 步骤:定义异常处理函数, 并使用该函 ...

随机推荐

  1. HTML5实现本地JSON文件的读写

    参考: 使用HTML5来实现本地文件读取和写入  (FileReader读取json文件,FileSaver.js保存json文件) w3school <input>标签 FileRead ...

  2. Spring mvc 接口枚举类型数据格式化处理

    一.背景简述 首先,我们都知道枚举实例有两个默认属性,name 和 ordinal,可通过 name()和ordinal()方法分别获得.其中 name 为枚举字面量(如 MALE,FEMALE),o ...

  3. window10装机 nvem简介,针对于 联想R720系列

    1.nvem格式的硬盘比较新,传统的老毛桃,大白菜,并不能有效使用. 2.对于镜像类 goust类,仍然具备 硬盘兼容性差(对于gpt,MAR,uefi并不够智能)成功率极低,容易丢失一些关键文件,造 ...

  4. [No000017B]改善C#程序的建议4:C#中标准Dispose模式的实现

    需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象: 非托管资源:不 ...

  5. MySql数据库笔试题总结

    数据库面试题94577265 1,设有关系EMP(ENO,ENAME,SALARY,DNO),其中各属性的含义依次为职工号.姓名.工资和所在部门号,以及关系DEPT(DNO,DNAME,MANAGER ...

  6. 1.7Oob 静态变量静态方法

    1)静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员 2)如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量. 3)静态方法中不能直接调用非静态方法 ...

  7. 使用FFmpeg常见问题

    使用FFmpeg常见问题 https://blog.csdn.net/willib/article/details/52530328 https://blog.csdn.net/nogodoss/ar ...

  8. i-chips融合芯片分析

    适合做图像变形和融合 http://www.i-chips.co.jp/products/ma_non-deployment/c786.html 下面视频其实用了2个芯片,其中IP00C733用原始信 ...

  9. [https][openssl] OpenSSL 公钥、私钥以及自签名证书

    转自:https://www.zybuluo.com/muyanfeixiang/note/392079 简介 公钥私钥用来互相加解密的一对密钥,一般是采用RSA非对称算法.公钥加密的私钥能解密,私钥 ...

  10. 什么是渲染目标(render target)&& 渲染到纹理(Render To Texture, RTT)详解

    渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...