练习:常见异常练习

 

1:写一个新的函数int_input(),输入整数的时候,正常返回。否则提示错误,并重新输入。

def int_input(temp):
    while True:
        try:
            int(input(temp))  #int()  把字符串数字转换成整形数字,如果参数不是数字,则产生异常
            break
        except ValueError:
            print("出错啦,你输入的不是整数")
        


int_input("请输入一个整数:")    

 

2:把文件关闭放在finally里,还是有可能出问题。如果文件不能正常打开,最后关闭时也会出错误

try:
    f=open("我不是文件.txt")
    print(f.read())

except OSError as reason:
    print("出错啦,原因是:",reason)

finally:
    f.close()

 

执行结果: 

出错啦,原因是: [Errno 2] No such file or directory: '我不是文件.txt'
Traceback (most recent call last):
  File "C:/Users/Administrator/AppData/Local/Programs/Python/Python36-32/test.py", line 9, in <module>
    f.close()
NameError: name 'f' is not defined

 可以通过下面方法,避免新的关闭时候的异常

try:
    f=open("我不是文件.txt")
    print(f.read())

except OSError as reason:
    print("出错啦,原因是:",reason)

finally:
    if "f" in locals():  #如果文件对象变量存在当前局部变量符号表的话,说明打开成功
        f.close()

 3:使用with方法,不必再担心文件打开之后忘记关闭的尴尬

    with会自动处理文件的关闭和打开,如果中途出现异常,会执行清理代码,确保文件自动关闭

try:
    with open("data.txt","w") as f:
        for each_line in f:
            print(each_line)
except OSError as reason:
    print("出错啦!"+str(reason))

  with可以同时处理多个项目,只需用逗号隔开

with a() as a,b() as b

 

 

 4:用异常原理,是source更高效。 不用每次判断key是否存在,直接使用,然后在异常里处理

#判断编号是否正确
while True:
    print("|---欢迎进入通讯录---|")
    print("|--1:查询联系人资料--|")
    print("|--2:插入新的联系人--|")
    print("|--3:删除已有联系人--|")
    print("|--4:退出通讯录程序--|")

    try:
        num=int(input("请选择编号:"))
        if num not in range(1,5):
            print("编号输入错误,请重新输入!")
        else:
            #查找联系人----------------------------------------------------
            if num==1:
                try:
                    name=input("请输入联系人名称:")
                    print(name,":",contacts[name])
                except KeyError:
                    print("找不到!")


            #插入联系人----------------------------------------------------
            if num==2:
                name=input("请输入联系人名称:")
                try:
                    print("该联系人已经存在!") #为了提高效率,直接输出该用户名信息,没有执行异常
                    print(name,":",contacts[name])
                    if(input("是否修改用户资料(YES/NO):") in ["YES","yes"]):
                        contacts[name]=input("请输入用户联系电话:")
                except KeyError:
                        contacts[name]=input("请输入用户联系电话:")

            #删除联系人----------------------------------------------------
            if num==3:
                name=input("请输入联系人名称:")
                try:
                    contacts.pop(name)
                except KeyError:
                    print("您输入的联系人不存在!")    

            #退出----------------------------------------------------
            if num==4:
                break

    except ValueError:
        print("编号输入错误,请重新输入!")

 

转载于:https://www.cnblogs.com/marianyad/p/6629070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值