1. try - except 语句
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
实例:
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'
2. try - except - finally 语句
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
实例:
def divide(x, y):
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'
3. try - except - else 语句
try:
检测范围
except(Exception1[, Exception2[,...ExceptionN]]]):
发生以上多个异常中的一个,执行这块代码
else:
如果没有异常执行这块代码
实例:
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
fh.close()
# 内容写入文件成功
4. raise语句
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
# An exception flew by!
5. 练习题
题目描述:
电脑产生一个零到100
之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。
(尝试使用try catch
异常处理结构对输入情况进行处理)
获取随机数采用random
模块。
import random
answer = random.randint(0,100)
print('猜测一个0到100之间的整数.')
sum = 1
while(True):
try:
print('第'+ str(sum) + '次猜,请输入一个整形数字')
userNumber = int(input())
assert userNumber >= 0 and userNumber <= 100
if userNumber > answer:
print('太大')
sum += 1
elif userNumber < answer:
print('太小')
sum += 1
else:
print('恭喜你猜到了这个数是' + str(answer))
break;
except (ValueError,AssertionError):
print('输入无效')
参考: 异常处理