欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python第三章 异常处理

程序员文章站 2023-01-25 15:37:19
Python第三章 异常处理异常处理语句try - except 语句try-except-elsetry-except-finallyraise语句章节练习异常处理语句try - except 语句try: 检测范围except Exception[as reason]: 出现异常后的处理代码类似java中的try…catch…语句。try中的语句出错,如果错误类型就是except后的类型相同就执行except后的代码,否则就把错误向上抛出异常;有上层掉用方去捕获这个异常;a...

异常处理语句

try - except 语句

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
  • 类似java中的try…catch…语句。try中的语句出错,如果错误类型就是except后的类型相同就执行except后的代码,否则就把错误向上抛出异常;有上层掉用方去捕获这个异常;as error,这个error是except后面的代码块能够使用时错误原因(看代码2)。
try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError:
    print('打开文件出错')

# 打开文件出错
--------------------------------

try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))

# 打开文件出错
# 原因是:[Errno 2] No such file or directory: 'test.txt'
--------------------------------

//可以多个异常一起捕获,但是一个时间只能有一个except被执行
try:
    int("abc")
    s = 1 + '1'
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
    print('类型出错\n原因是:' + str(error))
except ValueError as error:
    print('数值出错\n原因是:' + str(error))

# 数值出错
# 原因是:invalid literal for int() with base 10: 'abc'
--------------------------------

//在一个except 后写多个异常,用括号连接起来 as error ;
try:
    s = 1 + '1'
    int("abc")
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError, TypeError, ValueError) as error:
    print('出错了!\n原因是:' + str(error))

# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'

try-except-else

  • 如果在try子句执行时没有发生异常,Python将执行else语句后的语句。
dict1 = {'a': 1, 'b': 2, 'v': 22}
try:
    x = dict1['y']
except KeyError:
    print('键错误')
except LookupError:
    print('查询错误')
else:
    print(x)

# 键错误

LOOKupError中包含KeyError异常,父子关系,有顺序要求,如果父类在前面的话,那么后面的子类永远不会执行。
注意:else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。

try-except-finally

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码
    
  • 不管try子句里面有没有发生异常,finally子句都会执行。
  • 如果一个异常在try子句里被抛出,而又没有任何的except把它截住,那么这个异常会在finally子句执行后被抛出
  • 如果except后面没有任何错误类型,那就表明要捕获所有的异常;
    try:
        result = x / y
        print("result is", result)
    except ZeroDivisionError:
        print("division by zero!")
    finally:
        print("executing finally clause")


divide(2, 1)
# result is 2.0
# executing finally clause
divide(2, 0)
# division by zero!
# executing finally clause
divide("2", "1")
# executing finally clause
# TypeError: unsupported operand type(s) for /: 'str' and 'str'

raise语句

  • Python 使用raise语句抛出一个指定的异常。手动向外扔出去一个异常;
try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')

章节练习

1、猜数字游戏

题目描述:

电脑产生一个零到100之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。

(尝试使用try catch异常处理结构对输入情况进行处理)

获取随机数采用random模块。Python第三章 异常处理

import random
print('请输入0到100之间的整数.')
number=random.randint(0,100)# 生成1到100之间的一个随机整数
#guess=int(input("第1次输猜,请输入一个整形的数字 : "))
print(f"随机的数字是{number}")
n=1
while True:
    try:
        guess = int(input(f"第{n}次输猜,请输入一个整形的数字 : "))
    except:
        print('输入无效')  # 如果int转化失败就说明不是整数
    else:
        if guess < number:
            print('太小')
        elif guess > number:
            print('太大')
        else:
            print(f'恭喜你猜到了这个数是{number}')
            print("game over!")
            break
        n += 1

本文地址:https://blog.csdn.net/DMULLQ/article/details/107569577

相关标签: Python