首页 > 代码库 > Python菜鸟学习手册11----异常处理
Python菜鸟学习手册11----异常处理
介绍
在项目开发中,异常处理是不可或缺的。异常处理帮助人们debug,通过更加丰富的信息,让人们更容易找到bug的所在。异常处理还可以提高程序的容错性。
>>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: division by zero上例中输入一除以零触发ZeroDivisionError异常。下面我们来捕捉这个异常
strFormula=input("请输入公式") while(True): if strFormula=="exit": print("计算结束") break try: print("%s=%.2f" %(strFormula,eval(strFormula))) except ZeroDivisionError: print("除数不能为零") except: print("公式输入有误!") strFormula=input("请输入公式")
如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较,看是否是exception1, exception2...,直到找到其归属,执行相应的except中的语句。如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理。
如果无法将异常交给合适的对象,异常将继续向上层抛出,直到被捕捉或者造成主程序报错。比如下面的程序
def test_func(): try: m = 1/0 except NameError: print("Catch NameError in the sub-function") try: test_func() except ZeroDivisionError: print("Catch error in the main program")子程序的try...except...结构无法处理相应的除以0的错误,所以错误被抛给上层的主程序。
抛出异常
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
try: s = None if s is None: #is检查两个对象是否是同一个对象 print ("s 是空对象") raise Error1 #如果引发Error1异常,后面的代码将不能执行 print (len(s)) except TypeError: print ("空对象没有长度")
自定义异常
python允许程序员自定义异常,用于描述python中没有涉及的异常情况,自定义异常必须继承Exception类,自定义异常按照命名规范以"Error"结尾,显示地告诉程序员这是异常。自定义异常使用raise语句引发,而且只能通过人工方式触发。
class MyInputException(Exception): def __init__(self, length, least): Exception.__init__(self) self.length = length self.least = least try: s = input('输入一个字符串:') # 如果长度小于5,触发自定义的异常 if len(s) < 5: raise MyInputException(len(s), 5) except EOFError: print ('触发了EOF错误,按了Ctrl+d') except MyInputException as x: #2.6版本之后要使用as print ('输入的字符串只有%d,至少需要%d个字符' % (x.length, x.least)) except Exception: print ('不知道什么错误!' ) finally: print ('有没有异常都会执行这里!')
小提示:
1.异常处理的格式
try:...
except exception1:
...
except exception2:
...
except:
...
else: #如果try中没有异常,那么except部分将跳过,执行else中的语句。
...
finally: # finally是无论是否有异常,最后都要做的一些事情。
...
2.
file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: #文件读写将.close()放在finally中是个好习惯 file_object.close( )
3.python中is和 == 的区别
在python中,is检查两个对象是否是同一个对象,而==检查他们是否相等.
p = [1] q = [1] p is q # False 因为他们不是同一个对象 p == q # True 因为他们的值相等所以如果你要比较两个值是否相同就用==,如果比较是否是同一个对象就用is.
其实python中的is比较的对象很像C语言中的指针,只有地址相同的指针才是同一个指针.
上一讲:Python菜鸟学习手册10----文件的输入与输出
下一讲:
如果有什么疑问欢迎到我的微信公众号提问~
Python菜鸟学习手册11----异常处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。