Python 第七章 异常


前言

    Python 使用被称为异常的特殊对象来管理程序执行期间出现的错误,每当发生错误时,它都会创建一个异常对象,终止程序并显示一个包含异常报告的 traceback。
    异常是使用 try-except 代码块处理,它让 python 执行指定操作,并告诉 python 发生异常该怎么办。


一、处理 ZeroDivisionError(除0错误)

    当一个数字除以0时会出现 ZeroDivisionError 错误

代码如下(示例):

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

while True:
    first_number = input('first_number:')
    if first_number == 'q':
        break
    second_number = input('second_number:')
    if second_number == 'q':
        break
    answer = int(first_number)/int(second_number)
    print(answer)

输出:

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
first_number:15
second_number:5
3.0
first_number:5
second_number:0
Traceback (most recent call last):
  File "D:/PythonWorkSpace/lianxi2.py", line 50, in <module>
    answer = first_number/second_number
ZeroDivisionError: division by zero

进程已结束,退出代码 1

    上述情况下,python 将停止运行程序,并指出引发了那种异常,我们可根据这些信息对异常进行修改。

二、使用 try-except 代码块

    当你认为可能发生错误时,可编写一个 try-except 代码块来处理可能发生的异常,让 python 尝试运行一些代码,并告诉它如果代码引发了指定异常该怎么办。

代码如下(示例):

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

while True:
    first_number = input('first_number:')
    if first_number == 'q':
        break
    second_number = input('second_number:')
    if second_number == 'q':
        break
    try:
        answer = int(first_number)/int(second_number)
    except ZeroDivisionError:
        print("You can't divide by zero!")

输出:

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
first_number:15
second_number:0
You can't divide by zero!
first_number:q

进程已结束,退出代码 0

    将导致错误的代码行放在 try 代码块中,except 代码块告诉 python 如果 try 代码块出错该怎么办,即使出现异常,程序也将继续运行:显示你编写的友好的错误信息,而不是 traceback。

三、使用 try-except-else 代码块

    try-except-else 代码块工作原理大致如下 :将导致错误的代码行放在 try 代码块中,except 代码块告诉 python 如果 try 代码块出错该怎么办,else 代码块中存放着 try 代码块执行成功后需要继续执行的代码;

    python 尝试执行 try 代码块中的代码,成功执行为出错则会跳过 except 代码块继续执行 else 代码块;如果 try 代码块出错则会执行 except 代码块,告诉我们出错后该怎么办。

代码如下(示例):

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

while True:
    first_number = input('first_number:')
    if first_number == 'q':
        break
    second_number = input('second_number:')
    if second_number == 'q':
        break
    try:
        answer = int(first_number)/int(second_number)
    except ZeroDivisionError:
        print("You can't divide by zero!")
    else:
        print(answer)

输出:

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
first_number:15
second_number:3
5.0
first_number:15
second_number:0
You can't divide by zero!
first_number:q

进程已结束,退出代码 0

四、分析文本

    统计文学书籍 Youth 中有多少个单词(词频统计)。

代码如下(示例):

def count_words(filename):
    """计算文本中大约有多少个单词"""
    try:
        with open(filename, encoding='UTF-8-sig') as file_oj:
            contents = file_oj.read()
    except FileNotFoundError:
        msg = 'Sorry,this file ' + filename + 'does not exist.'
        print(msg)
    else:
        # 以空格对文本进行切分,独立出每个单词
        words = contents.split()
        # 将切分后的单词以及每个单词出现的次数放在字典中
        for word in words:
            # print('%s : %d times' % (word, words.count(word)))
            filed[word] = words.count(word)
        num_words = len(words)
        print('This file ' + filename + ' has about ' + str(num_words) + ' words.')


filed = {}
file_name = r'filer_w\Youth.txt'
count_words(file_name)

输出:

This file filer_w\Youth.txt has about 27317 words.

进程已结束,退出代码 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值