异常
try-except代码块
程序运行有时会出现一些错误,python都会创建一个异常对象,显示一个traceback,一方面traceback带有一定的复杂性,有些用户难以读懂,另一方面,一些不怀好意的用户会利用识破traceback中的一些细节进而对程序发起破坏,因此对于出现异常情况,我们应该在程序中显示一个我们编写的友好的错误提示消息,这里最基本的为try-except代码块
将要测试的代码放进try下,将可能出现的错误以及提示信息放进except模块中
try:
print(5/0)
except ZeroDivisionError:
print('you can\'t divide by zero')
else代码块
将可能发生错误的代码块放进try-except代码块中,将不会发生错误的代码放进else代码块中
print('麻溜儿的给我两个数字,我练一练除法运算')
while True:
first_number = input('\n第一个:')
if first_number == 'q':
break
second_number = input('\n第二个:')
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print('竟然用0当分母,这是看不起我熊二吗?!')
else:
print(answer)
处理FileFoundError异常
常见的文件处理中要查找的文件可能在其他地方也可能不存在,对此可以使用上述三个代码块的结合来处理异常对于多个文件的处理十分友好,不存在的文件直接跳过转而处理下一个文件,当将except代码块中的内容改为pass时,直接不会显示不存在的文件,只会将已经存在的文件的信息打印出来
def txt_words(filename):
try:
with open(filename) as file_object:
word = file_object.read()
except FileNotFoundError:
print(filename + ' not exist')
else:
num = word.split()
number = len(num)
print(number)
filename = ['reason.txt','help.txt','programming.txt','guest.txt']
for file in filename:
txt_words(file)
课后习题
10-7加法运算
while True:
num_1 = input('input first number:')
if num_1 == '':
break
num_2 = input('input second number:')
if num_2 == '':
break
try:
add = int(num_1) + int(num_2)
except ValueError: # TypeError做不出来,用ValueError
print('输入数字不会吗?!')
else:
print(add)
10-8猫和狗
catname = 'cats.txt'
with open(catname,'w') as file_object1:
file_object1.write('kathy\n')
file_object1.write('handy\n')
file_object1.write('kai\n')
try:
with open(catname) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
print('亲,文件不在这个文件夹哦')
else:
print(contents)
dogname = 'dog.txt'
try:
with open(dogname) as f_obj1:
contents1 = f_obj1.read()
except FileNotFoundError:
print('亲,文件不在这个文件夹哦')
else:
print(contents1)
10-9沉默的猫和狗
只需将excepe下的代码改为pass即可
10-10常见单词
filename = 'Alice Adventures in Wonderland.txt'
with open(filename) as f_obj:
contents = f_obj.read()
nums = contents.split() # 分成一个列表
i = 0
for num in nums:
if num.lower == 'the' # 判断
i += 1
print(i) # 1777