一、异常

异常是什么?

就是影响程序正常执行的事件,异常在程序执行的过程中发生,脚本发生异常时,我们需要捕获它,否则程序就会终止。

异常处理:

1、捕获异常:try:。。。except 。。。。。

 while True:
try:
num1=input('>>:')
num2 = input('>>:')
num1=int(num1) # 出错,不再往下执行try里面的代码块, 直接进入except
num2 = int(num2)
num=num1+num2
print(num)
except Exception as e:
print(e) #捕获错误信息 程序重新执行

2、复杂的异常处理结构:

try:

代码块1

except:

代码块2

else:

代码块3

finally:

代码块4

不出异常:1-3-4

出异常:1-2-4

3、异常种类

Exception可以捕获所有的异常

常用的其他异常

 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行

 s1 = 'hello'
try:
int(s1)
except IndexError as e:
print e
except KeyError as e:
print e
except ValueError as e:
print e
except Exception as e:
print e

主动触发异常

raise ..............   一般和自定义异常搭配使用

 while True:
try:
num1=input('>>:')
num2 = input('>>:')
num1=int(num1)
num2 = int(num2)
num=num1+num2
print(num)
raise Exception('eeeeeeeeeerrrrrrrrrrrrrrSSSSSSSS') #主动触发异常
except Exception as e:
print(e) # 打印出 eeeeeeeeeerrrrrrrrrrrrrrSSSSSSSS

断言:  assert 条件

 print(1)
assert 1==1
print(2)
'''输出:1
2
'''

二、反射

       以字符串的形式去访问对象中指定的属性,反射有四个方法:      

     hasattr(容器,'名称')    以字符串的形式判断某对象中是否含有指定的属性

    getattr(容器,'名称')    以字符串的形式去某个对象中获得指定的属性

    setattr(容器,'名称',值)      以字符串的形式去某个对象中设置指定的属性

    delattr(容器,'名称')     以字符串的形式去某个对象中删除指定的属性

1、允许用户输入 不同的url:
account/login
account/logout
home/index
home/order
2、看到不同的结果
3、输入不存在的url,曝404错误 url列表=[account/login,account/logout,home/index,home/order]
以上url的函数均保存在controller下的account脚本中
'''
inp=input('请输入url')
m,n=inp.split('/') #m=account n=login
去某个模块中找函数,如果函数存在就执行函数,如果不存在函数就报错
getattr() #专门用来去某个地方获取内部的东西 (以字符串的形式获取)
 from controller import account   #以上url的函数均保存在controller下的account脚本中

 h=hasattr(account,'login1') #去account模块(脚本)中,是否存在login函数
print(h) # 存在返回true 不存在返回false
getattr(account,'login')# 去account模块(脚本)中获取login函数 setattr(account,'login1','ddd') #去account模块(脚本)中添加login1函数
h=hasattr(account,'login1') #再次判断是否存在login1属性
print(h) #返回true delattr(account,'login1') #去account模块(脚本)中删除login1函数
h=hasattr(account,'login1') #再次判断是否存在login1属性
print(h) #返回false

python-异常处理的更多相关文章

  1. python异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...

  2. Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏

    一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...

  3. Python 异常处理--raise函数用法

    raise语句手工引发一个异常: "raise" [expression ["," expression ["," expression]] ...

  4. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  5. python异常处理try,except,else,finally,raise

    先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...

  6. Python 异常处理

    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...

  7. python异常处理的哲学

    所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可 ...

  8. Python异常处理总结

    一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这 ...

  9. python异常处理与断言以及日志模块

    python异常处理与断言 目录: 1.异常处理 2.断言(assert) 3.日志模块(logging) 4.修改之前的车票信息查询,把日志模块.异常处理加进去 1.异常处理 代码如下: 语法: t ...

  10. python 异常处理函数--raise

    Python 异常处理--raise函数用法 在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称.异常名称标识出具体的类: Python异常处理是那些类的对象 ...

随机推荐

  1. java——获取从控制台输入的数据的方法

    一.使用标准输入串System.in System.in.read();     //一次只读入一个字节数据,但是我们往往希望获得的是一个字符串或者一组数字 二.使用Scanner获得一个字符串或一组 ...

  2. ABP 初探 之 AbpSession 扩展

    Abp的权限管理是基于 Identity,所有的扩展也是基于 claims .claims 有许多默认属性,具体连接 关于 Identity的详细介绍,可以参考园友博客 继承 Microsoft.As ...

  3. Lind.DDD.ExpressionExtensions动态构建表达式树,实现对数据集的权限控制

    回到目录 Lind.DDD框架里提出了对数据集的控制,某些权限的用户为某些表添加某些数据集的权限,具体实现是在一张表中存储用户ID,表名,检索字段,检索值和检索操作符,然后用户登陆后,通过自己权限来构 ...

  4. GJM:Unity导入百度地图SDK [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  5. Spark on Yarn 学习(一)

    最近看到明风的关于数据挖掘平台下实用Spark和Yarn来做推荐的PPT,感觉很赞,现在基于大数据和快速计算方面技术的发展很快,随着Apache基金会上发布的一个个项目,感觉真的新技术将会不断出现在大 ...

  6. js => ES6一个新的函数写法

    今天在网上参观到一个写法,返回字符串个个字母的个数 var arr='aaabbccaa'; var info = arr.split('').reduce((p, k) => (p[k]++ ...

  7. 1-2 nodejs小节 文件读取

    1.表达式 在命令行输入  node回车后,可以在后边输入相应的表达式,进行运算操作   2.阻塞文件读取 var data=fs.readFileSync('input.txt', 'utf-8') ...

  8. 阻止默认事件event.preventDefault();

    阻止浏览器默认事件.什么是默认事件,例如浏览器默认右键菜单.a标签默认连接跳转...,如何阻止呢? Firefox中,event必须作为参数传入.  IE中,event是window对象的属性. ev ...

  9. 使用jq插入节点

    .append()和.appendTo()两种方法功能相同,主要的不同是语法——内容和目标的位置不同 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插 ...

  10. SharePoint 2013 图文开发系列之InfoPath入门

    本文主要介绍SharePoint 2013中,简单发布InfoPath表单,并添加后台代码,示例比较简单,主要描述的是一个创建InfoPath的过程,而非多么深奥的后台代码,希望能够给初学者带来帮助. ...