第十三章 异常

简单的示例 

转自http://www.cainiao8.com/python/basic/python_16_exception.html
示例:
在没有任何定义x变量的时候:
print x
print 1

将会抛出NameError异常:
NameError: name 'x' is not defined

而且1并不会被输出,也就是说程序将被中断。如果讲代码修改如下:
try:
     print x
except NameError:
     print "Something is wrong!"
print 1

得到的输出将是:
Something is wrong!
1
可见,我们定义的except会“抓住”NameError类型的语句,并且执行相应的处理代码,而且程序不会被中断。如果你不想在异常发生时结束你的程序,只需在try里捕获它。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。
————————————————————————————————————————

错误

假如我们把print误拼为Print,注意大写,这样Python会 引发 一个语法错误。
>>> Print 'Hello World'
SyntaxError: invalid syntax
>>>
可以观察到有一个SyntaxError被引发。这是这个错误的 错误处理器 所做的工作。
————————————————————————————————————————————————

try...except

尝试读取用户的一段输入。按Ctrl+d
>>> s=raw_input('Enter something-->')
Enter something-->

Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    s=raw_input('Enter something-->')
EOFError: EOF when reading a line
>>> 
引发了一个称为EOFError的错误,这个错误基本上意味着它发现一个不期望的 文件尾(由Ctrl+d表示)
-----------------------------

处理异常

import sys
try:
    s = raw_input('Enter something --> ')
except EOFError:
    print '\nWhy did you do an EOF on me?'
    sys.exit() # exit the program
except:
    print '\nSome error/exception occurred.'
    # here, we are not exiting the program
print 'Done'
输出:
Enter something --> 


Why did you do an EOF on me?


Traceback (most recent call last):
  File "D:\Python27\hello.py", line 6, in <module>
    sys.exit() # exit the program
SystemExit

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

异常捕获模式

try # 语句子句形式表
except:           # 捕获所有异常
except name:       # 只捕获特定的异常
except name,value:   # 捕获异常和它的附加数据
except (name1,name2):   # 捕获任何列出的异常
else:           # 如果没有异常
finally:       # 总是执行
· 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
· 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
· 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
· 如果所有的except都不匹配, 则异常会传递到下一个调用本代码的最高层try代码中
· 如果没有发生异常,则执行else块代码。
使用except子句需要注意的事情,就是多个except子句截获异常时,如果各个异常类之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行到了。
_______________________________________________________________

引发异常

可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出
class ShortInputException(Exception):#我们自己定义的异常类型
    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)
        # 若改成raise ShortInputException(len(s), 3),“a exception”则错了,我的理解是两种格式不混用,"a exception"和(len(s),3)一样,都是参数。
except ShortInputException,x:# x是自定义异常的实例
    print 'ShortInputException: The input was of length %d, \
        was expecting at least %d' % (x.length, x.atleast)
else:
    print 'No exception was raised.'
raise是抛出异常,exception 是捕获异常。
如果只有抛异常,没有捕获异常,抛出的错误直接返回给你应用程序
如果有捕获异常,你的异常段可以对异常进行处理
--------------------------------------------------

as

as 定义异常实例(except IOError as e),老版本的Python,except语句写作"except Exception, e",Python 2.6后应写作"except Exception as e"。
--------------------------------------------------

raise

转载自http://blog.chinaunix.net/uid-22920230-id-3074716.html和http://www.cnblogs.com/rubylouvre/archive/2011/06/22/2086644.html和http://www.cnblogs.com/dkblog/archive/2011/06/24/2089026.html

一旦执行了raise语句,raise后面的语句将不能执行。也就是程序如果执行到raise后,就直接跳到exception部分进行处理
自定义异常必须继承Exception类,自定义异常使用raise语句引发,而且只能通过人工方式触发。
raise <name> #手工地引发异常
raise <name>,<data> #传递一个附加的数据
关键字raise,后跟要引发的异常的名称。异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创建指定的异常类的一个对象。
raise语句还可指定对异常对象进行初始化的参数。为此,请在 异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组)。
class MyException(Exception):pass
try:
    raise MyException,", and some additional data"
except MyException,e:
    print MyException
    print e
输出:
<class '__main__.MyException'>
, and some additional data

即捕捉到的内容为:
type = MyException
message =, and some additional data
捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该异常的except代码块
___________________________________________________________________________________________________________________

try..finally

import time
try:
  f = file(r'f:\a.txt')
  while True:
    line = f.readline()
    if len(line) == 0:
      break
    time.sleep(2)# 暂停2秒,让程序运行慢一点
    print line,
finally:
  f.close()
  print 'Cleaning up...closed the file'
在程序运行的时候,可以按Ctrl+c中断/取消程序。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值