异常

python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让python不知所措的错误时,他都会创建一个异常对象。如果你编写了处理异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

异常是使用try-except代码块处理的。try-except代码块让python执行指定的操作,同时告诉python发生异常时该怎么办。使用try-except代码块时,即使发生异常,程序也可以继续运行:显示你编好的友好的错误信息,而不是令用户迷惑的traceback。

一、处理ZeroDivisionError异常

division.py


print(5/0)


traceback:



  1. 使用try-except代码块

处理ZeroDivisionError异常的try-except代码块类似下面:


try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

     2.使用异常避免崩溃


print("give me two numbers,and I'll divide them.")
print("enter q to quit")

while True:
    first_number = input("\nFirst number:")
    if first_number == 'q':
        break
    second_number = input("\nSecond number:")
    if second_number == 'q':
        break
    answer = int(first_number) / int(second_number)
    print(answer)

让用户看到traceback也不是一个好主意,不懂技术的用户会被搞糊涂,而且如果用户怀有恶意,他会知道程序名称还将看到部分不能正确运行的代码。

      3.else代码块

依赖于try代码块成功运行的代码都应该放到else代码块中:


print("give me two numbers,and I'll divide them.")
print("enter q to quit")

while True:
    first_number = input("\nFirst number:")
    if first_number == 'q':
        break
    second_number = input("\nSecond number:")
    if second_number == 'q':
        break
    try:
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("You can't divide by 0")
    else:
        print(answer)

二、处理FileNotFoundError异常

使用文件时,一种常见的问题是找不到文件:你要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本不存在。对于这些情形,都可使用try-except代码块以直观的方式进行处理。

我们来尝试读取一个不存在的文件。


filename = 'alice.txt'

with open(filename) as f_obj:
    contents = f_obj.read()

引发的异常如下:



在这个示例中,错误是由函数open()导致的,因此要处理这个错误,必须将try语句放在包含Open()的代码行前


filename = 'alice.txt'

try:
    with open(filename) as f_obj:
        contents = f_obj.read()
except FileNotFoundError:
    msg = 'Sorry , the file ' + filename + ' does not exist'
    print(msg)

在这个实示例中,try代码块引发文件异常,因此python找出与该错误匹配的except代码块,并运行其中的代码块,最终显示一条友好的错误提示,而不是返回traceback



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值