#try-except语句'''异常捕获是通过try-except语句实现的,在try代码块中包含 在执行过程中可能引发异常的语句,如果没有发生异常,则跳到except代码块执行这就是异常捕获''''''try语句的执行流程:首先执行try中的代码块,如果执行过程中出现异常,系统会自动生成一个数据类型,并将该异常提交该Python解释器,此过程称为捕获异常。当Python解释器收到异常对象时,会寻找能处理该异常对象的except块,如果找到合适的except块,则把该异常交给该except处理,这个过程被称为处理异常。如果Python解释器找不到处理异常的except块,则程序运行终止。事实上,不管程序代码是否处于try块中,甚至包括except有块中的代码,只要执行该代码时出现了异常,系统都会自动生成对应类型的异常。但是如果此程序没有被try包裹,又或者没有为该异常配置相对应的用来处理它的except块,则Python解释器将无法处理,程序就会停止运行;反之,异常被try捕获并被except处理,则程序可以继续执行。try:<可能引发异常的语句>except[异常类型]: #异常类型可用省略<处理异常>'''print('--------没有指定捕获异常的类型-------------------')i=input('请输入数字')n=10try:result=n/int(i)print(result)print('{0}除以{1}等于{2}'.format(n,i,result))except: #如果没有指定异常类型,则任何的异常类型都会按照下面的方法处理print('发生异常')print('程序继续运行')'''如果不指定具体的异常类型数据,则except语句可以捕获在try过程中发生的所有异常。如果指定具体的异常类型,则except语句只能捕获在try中发生的指定类型的异常。在Python中推荐在except语句中指定具体的异常类型'''print('------------指定捕获除零异常----------------------')i=input('请输入数字')n=100try:result=n/int(i)print(result)print('{0}除以{1}等于{2}'.format(n,i,result))except ZeroDivisionError as e: #只能处理当被除数是0时发生的异常,其他异常还是会报错print('不能除以0,异常{}'.format(e))except ValueError as e:print('数值转换异常')print('----------------多个except代码块-----------------')'''多条语句可能引发多种不同的异常,对每一种异常都会采用不同的处理方式。针对这种情况,我们可以在try后面加上多个except代码块try:<可能引发异常的语句>except 异常类型1:<处理异常>except 异常类型2:<处理异常>...except:<处理异常>#省略异常类型的except代码块是默认的except代码块,它只能被放到最后,捕获上面没有被匹配的异常类。'''i=input('请输入数字')n=1000try:result=n/int(i) #表达式可能发生除0异常,int(i)也可能发生整数转换异常print(result)print('{0}除以{1}等于{2}'.format(n,i,result))except ZeroDivisionError as e: #捕获除零异常print('不能除以0,异常:{}'.format(e))except ValueError as e: #捕获整数转换异常print('输入的是无效的数值,异常:{}'.format(e))print('-----------多重异常捕获---------------')'''如果多个except代码块的处理异常过程类似,则可以合并处理,这就是多重异常捕获'''i=input('请输入数值')n=1000try:result=n/int(i)print(result)print('{0}除以{1}等于{2}'.format(n,i,result))except (ZeroDivisionError,ValueError) as e:print('异常发生:{}'.format(e))print('-------------try-except语句嵌套-----------------')i=input('请输入数值')n=100try:i2=int(i) #整数转换过程可能发生异常try:result=n/i2print('{0}除以{1}等于{2}'.format(n,i2,result))except ZeroDivisionError as e1:print('不能除以0,异常:{}'.format(e1))except ValueError as e2:print('输入的是无效的数值,异常:{}'.format(e2))print('---------------使用finally代码块释放资源---------------')'''有时在try-except语句中会占用一些资源,例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源,需要程序员释放这些资源。为了确保这些资源能被释放,可以在try-except代码块后面加上finally代码块try:<可能引发异常的语句>except 异常类型1:<处理异常>except 异常类型2:<处理异常>...except:<处理异常>finally:<释放资源的代码>'''i=input('请输入数值')n=1000try:result=n/int(i)print(result)print('{0}除以{1}等于{2}'.format(n,i,result))except ZeroDivisionError as e:print('不能除以0,异常:{}'.format(e))except ValueError as e:print('数值转换异常:{}'.format(e))finally:#释放资源代码print('资源释放')#捕获到数值转换异常或除零异常,或者代码正常运行,都会执行finally代码块print('---------------自定义类异常-------------------------')'''许多公司为了提高代码的可重用性,自己编写了一些Python类库,其中自己编写了一些异常类。实现自定义异常类,需要继承Exception类或其子类,前面的ZeroDivisionError和ValueError都属于Exception的子类'''class zdy(Exception):def __init__(self,message): #构造方法,其中的参数message是异常妙手信息super().__init__(message) #调用父类构造方法,并把参数message传递给父类构造方法i=input('请输入数值')n=100try:result=n/int(i)print(result)print('{0}除以{1}等于{2}'.format(n,i,result))except ZeroDivisionError as e:#print('不能除以0,异常:()'.format(e)raise zdy('不能除以0') #raise语句可以手动引发异常except ValueError as e:#print('数值转换异常:{}'.format(e))raise zdy('输入的是无效的数值') #raise语句可以手动引发异常''''''#try-except语句 '''异常捕获是通过try-except语句实现的, 在try代码块中包含 在执行过程中可能引发异常的语句, 如果没有发生异常,则跳到except代码块执行 这就是异常捕获''' '''try语句的执行流程: 首先执行try中的代码块,如果执行过程中出现异常,系统会自动生成一个数据类型,并将该异常提交该Python解释器,此过程称为捕获异常。 当Python解释器收到异常对象时,会寻找能处理该异常对象的except块,如果找到合适的except块,则把该异常交给该except处理,这个过程被称为处理异常。 如果Python解释器找不到处理异常的except块,则程序运行终止。 事实上,不管程序代码是否处于try块中,甚至包括except有块中的代码,只要执行该代码时出现了异常,系统都会自动生成对应类型的异常。 但是如果此程序没有被try包裹,又或者没有为该异常配置相对应的用来处理它的except块,则Python解释器将无法处理,程序就会停止运行;反之,异常被try捕获并被except处理,则程序可以继续执行。 try: <可能引发异常的语句> except[异常类型]: #异常类型可用省略 <处理异常> ''' print('--------没有指定捕获异常的类型-------------------') i=input('请输入数字') n=10 try: result=n/int(i) print(result) print('{0}除以{1}等于{2}'.format(n,i,result)) except: #如果没有指定异常类型,则任何的异常类型都会按照下面的方法处理 print('发生异常') print('程序继续运行') '''如果不指定具体的异常类型数据,则except语句可以捕获在try过程中发生的所有异常。 如果指定具体的异常类型,则except语句只能捕获在try中发生的指定类型的异常。 在Python中推荐在except语句中指定具体的异常类型''' print('------------指定捕获除零异常----------------------') i=input('请输入数字') n=100 try: result=n/int(i) print(result) print('{0}除以{1}等于{2}'.format(n,i,result)) except ZeroDivisionError as e: #只能处理当被除数是0时发生的异常,其他异常还是会报错 print('不能除以0,异常{}'.format(e)) except ValueError as e: print('数值转换异常') print('----------------多个except代码块-----------------') '''多条语句可能引发多种不同的异常,对每一种异常都会采用不同的处理方式。 针对这种情况,我们可以在try后面加上多个except代码块 try: <可能引发异常的语句> except 异常类型1: <处理异常> except 异常类型2: <处理异常> ... except: <处理异常> #省略异常类型的except代码块是默认的except代码块,它只能被放到最后,捕获上面没有被匹配的异常类。 ''' i=input('请输入数字') n=1000 try: result=n/int(i) #表达式可能发生除0异常,int(i)也可能发生整数转换异常 print(result) print('{0}除以{1}等于{2}'.format(n,i,result)) except ZeroDivisionError as e: #捕获除零异常 print('不能除以0,异常:{}'.format(e)) except ValueError as e: #捕获整数转换异常 print('输入的是无效的数值,异常:{}'.format(e)) print('-----------多重异常捕获---------------') '''如果多个except代码块的处理异常过程类似,则可以合并处理,这就是多重异常捕获''' i=input('请输入数值') n=1000 try: result=n/int(i) print(result) print('{0}除以{1}等于{2}'.format(n,i,result)) except (ZeroDivisionError,ValueError) as e: print('异常发生:{}'.format(e)) print('-------------try-except语句嵌套-----------------') i=input('请输入数值') n=100 try: i2=int(i) #整数转换过程可能发生异常 try: result=n/i2 print('{0}除以{1}等于{2}'.format(n,i2,result)) except ZeroDivisionError as e1: print('不能除以0,异常:{}'.format(e1)) except ValueError as e2: print('输入的是无效的数值,异常:{}'.format(e2)) print('---------------使用finally代码块释放资源---------------') '''有时在try-except语句中会占用一些资源,例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源,需要程序员释放这些资源。 为了确保这些资源能被释放,可以在try-except代码块后面加上finally代码块 try: <可能引发异常的语句> except 异常类型1: <处理异常> except 异常类型2: <处理异常> ... except: <处理异常> finally: <释放资源的代码> ''' i=input('请输入数值') n=1000 try: result=n/int(i) print(result) print('{0}除以{1}等于{2}'.format(n,i,result)) except ZeroDivisionError as e: print('不能除以0,异常:{}'.format(e)) except ValueError as e: print('数值转换异常:{}'.format(e)) finally: #释放资源代码 print('资源释放') #捕获到数值转换异常或除零异常,或者代码正常运行,都会执行finally代码块 print('---------------自定义类异常-------------------------') '''许多公司为了提高代码的可重用性,自己编写了一些Python类库,其中自己编写了一些异常类。 实现自定义异常类,需要继承Exception类或其子类, 前面的ZeroDivisionError和ValueError都属于Exception的子类''' class zdy(Exception): def __init__(self,message): #构造方法,其中的参数message是异常妙手信息 super().__init__(message) #调用父类构造方法,并把参数message传递给父类构造方法 i=input('请输入数值') n=100 try: result=n/int(i) print(result) print('{0}除以{1}等于{2}'.format(n,i,result)) except ZeroDivisionError as e: #print('不能除以0,异常:()'.format(e) raise zdy('不能除以0') #raise语句可以手动引发异常 except ValueError as e: #print('数值转换异常:{}'.format(e)) raise zdy('输入的是无效的数值') #raise语句可以手动引发异常 ''''''