java python 调用异常处理_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模块。

351ede809b625d7fe566a9ca54801751.png

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

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值