- 异常处理
python使用被称为异常的特殊对象来管理程序执行期间发生的错误。
每当发生让python不知所措的错误时,它都会创建一个异常对象。如果编写了处理该异常的代码,程序会继续运行;否则程序会停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except代码块处理的,try-exception代码块让python执行指定的操作,同时告诉python发生异常怎么办。使用了try-exception代码块时,即便出现异常,程序也将继续运行,显示你编写的友好的错误消息。 - ZeroDivisionError
一个数字除以0会触发ZeroDivisionError异常。
使用try-except代码块处理可能引发的异常,将可能导致错误的代码行放在try代码块内。
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
创建一个只执行除法运算的计算器:
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit")
while True:
first_number=input("first number: ")
if(first_number=='q'):
break
second_number=input("second number: ")
if(second_number=='q'):
break
answer = int(first_number)/int(second_number)
print("Answer is "+ str(answer))
在除数为0的时候触发异常,导致程序崩溃,让用户看到traceback是很糟糕的事情。
使用try-except代码块进行异常处理:
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit")
while True:
first_number=input("first number: ")
if(first_number=='q'):
break
second_number=input("second number: ")
if(second_number=='q'):
break
try:
answer = int(first_number)/int(second_number)
except ZeroDivisionError:
print("You can't divide by 0.")
else:
print("Answer is "+ str(answer))
通过预测可能发生错误的代码,可以编写出健壮的程序,即使面临无效数据或缺少资源,也能够继续运行,从而抵御无意的用户错误和恶意的攻击。
- FileNotFoundError
使用文件时,常见的问题是找不到文件:文件在别的地方、文件名不对或者文件根本不存在。
filename = "alice.txt"
with open(filename) as f_obj:
contents = f_obj.read()
这个异常是函数open()导致的,因此需要将open()放在try-except代码块内。
filename = "alice.txt"
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg="Sorry,the file "+ filename + " does not exist."
print(msg)
简单分析文本,使用split()方法可以以空格为分隔符将字符串拆分为多个部分,并将这些部分都存储到一个列表中。
将alice.txt文件放入文件夹中
filename = "alice.txt"
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg="Sorry,the file "+ filename + " does not exist."
print(msg)
else:
words = contents.split()
num_words = len(words)
print("The file "+filename +" has about "+ str(num_words)+" words.")
- pass
使用pass可以让程序在异常的时候一声不吭,直接跳过。
修改上一段程序为函数形式,以读取多个文件:
def count_words(filename):
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg="Sorry,the file "+ filename + " does not exist."
print(msg)
else:
words = contents.split()
num_words = len(words)
print("The file "+filename +" has about "+ str(num_words)+" words.")
filenames = ['alice.txt','little_women.txt','siddhartha.txt']
for filename in filenames:
count_words(filename)
将异常处理代码改为pass
def count_words(filename):
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
#msg="Sorry,the file "+ filename + " does not exist."
#print(msg)
pass
else:
words = contents.split()
num_words = len(words)
print("The file "+filename +" has about "+ str(num_words)+" words.")
filenames = ['alice.txt','little_women.txt','siddhartha.txt']
for filename in filenames:
count_words(filename)
pass语句还充当了占位符,提醒你在程序的某个地方什么都没做,以后可能要做点什么。例如将找不到的文件的名称写入missing_fils.txt文件。
- 所有异常
python异常
头大。。。
就酱!