Python第三章 异常处理
程序员文章站
2022-05-30 13:13:44
Python第三章 异常处理异常处理语句try - except 语句try-except-elsetry-except-finallyraise语句章节练习异常处理语句try - except 语句try: 检测范围except Exception[as reason]: 出现异常后的处理代码类似java中的try…catch…语句。try中的语句出错,如果错误类型就是except后的类型相同就执行except后的代码,否则就把错误向上抛出异常;有上层掉用方去捕获这个异常;a...
Python第三章 异常处理
异常处理语句
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模块。
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 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?
-
使用观察者模式处理异常信息,观察者模式_PHP教程
-
误drop tablespace后使用flashback database闪回异常处理
-
PHP处理来自Python的Post的json数据
-
带你轻松接触MySQL数据库的异常处理_MySQL
-
PHP中的错误处理、异常处理机制分析
-
如何处理稀疏矩阵?python实现稀疏矩阵教程
-
python 使用while循环来处理列表和字典
-
利用python处理简历和名单——处理excel & os、shutil处理文件
-
Spring Cloud Gateway全局通用异常处理的实现