try except

python中try/except/else/finally语句的完整格式如下所示:

try:

     Normal execution block

except A:

     Exception A handle

except B:

     Exception B handle

except:

     Other exception handle

else:

     if no exception,get here

finally:

     print("finally")   

 

正常执行的程序在try下面的Normal execution block执行块中执行,在执行过程中如果发生了异常,则中断当前在Normal execution block中的执行,跳转到对应的异常处理块中开始执行;

python从第一个except X处开始查找,如果找到了对应的exception类型则进入其提供的exception handle中进行处理,如果没有找到则直接进入except块处进行处理。except块是可选项,如果没有提供,该exception将会被提交给python进行默认处理,处理方式则是终止应用程序并打印提示信息

如果在Normal execution block执行块中执行过程中没有发生任何异常,则在执行完Normal execution block后会进入else执行块中(如果存在的话)执行。

无论是否发生了异常,只要提供了finally语句,以上try/except/else/finally代码块执行的最后一步总是执行finally所对应的代码块。

 

需要注意的是:

1.在上面所示的完整语句中try/except/else/finally所出现的顺序必须是try-->except X-->except-->else-->finally,即所有的except必须在else和finally之前else(如果有的话)必须在finally之前,而except X必须在except之前。否则会出现语法错误。

2.对于上面所展示的try/except完整格式而言,else和finally都是可选的,而不是必须的,但是如果存在的话else必须在finally之前finally(如果存在的话)必须在整个语句的最后位置

3.在上面的完整语句中,else语句的存在必须以except X或者except语句为前提,如果在没有except语句的try block中使用else语句会引发语法错误。也就是说else不能与try/finally配合使用

def div_apple(n):
    print('%d个苹果您想分给几个人?' % n)
    s = input('请输入人数:')
    cnt = int(s)   # <<-- 可能触发异常ValueError错误进入异常
    result = n / cnt  # <<-- 可能触发ZeroDivsionError错误进入异常
    print('每个人分了', result, '个苹果')

try:  # 正常执行
    div_apple(10)
    print('分苹果完成')


#-------------模块一:except 错误类型,捕获异常类型---------------------------
# except ValueError:  # 只有在有异常时才会执行
#     print('在try的内部语句中发生了值错误,已处理并转为正常状态')
# except ZeroDivisionError:
#     print('输入人数为0,分苹果失败')
#-------------------------------------------------------------------------



#---模块二:except(错误类型1,错误类型2):满足这两个错误类型都执行这个函数------
# except (ValueError, ZeroDivisionError):
#     print('苹果不分了')
#--------------------------------------------------------------------------



#--模块三:except:除了捕获的之外,不管什么异常都执行此函数----------------------
# except ValueError:  # 只有在有异常时才会执行
#     print('在try的内部语句中发生了值错误,已处理并转为正常状态')
# except:
#     print('收到除ValueError之外的错误通知')
#---------------------------------------------------------------------------



#--模块四:as 变量: 将捕获的错误信息用变量绑定----------------------------------
# as 的用法
# except ValueError as err:
#     print('错误的值是:', err)  # invalid literal for int() with base 10: 'aaa'

    # 10个苹果您想分给几个人?
    # 请输入人数: aaa
    # 错误的值是: invalid literal for int() with base 10: 'aaa'
    # 程序正常退出
#---------------------------------------------------------------------------



#--模块五:else的用法,只有在try是没有异常的时候才会执行--------------------------
# except ValueError:
#     print('苹果不分了')
# else:  # 只有在try没有发生错误时才会执行
#     print('在当前try语句内部,没有发生任何异常,程序正常执行')
#----------------------------------------------------------------------------



#--模块六:finally的用法,不管try有没有错误,其下的语句块都会执行------------------
# finally字句的用法
except ValueError:
    print('苹果不分了')
except:  # 除ValueError异常外的异常
    print('错误值是:0' )
else:  # 如果没有异常才执行
    print('else子句被执行了')
finally:  # 不管有没有异常都会执行的语句
    print('finally子句被执行了')
print('程序正常退出')

 注:try-except语句也可以放在函数的内部使用

# 方法一
def get_score():
    try:
        score = int(input('输入成绩: '))
    except ValueError:
        return 0
    if score in range(101):
        return score
    else:
        return 0
score = get_score()
print('学生的成绩是:', score)


# 方法二
def get_score():
    score = int(input('输入成绩: '))
    if score in range(101):
        return score
    else:
        return 0
try:
    score = get_score()
except ValueError:
    score = 0
print('学生的成绩是:', score)

原文: 

https://blog.csdn.net/geek_xiong/article/details/81915786

http://www.cnblogs.com/windlazio/archive/2013/01/24/2874417.html

https://blog.csdn.net/f156207495/article/details/78387617/

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值