1.异常
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
异常使用try-except代码块处理的。使用try-except代码块时,即便出显异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。
2.try-except代码块处理异常
try:
print(5/0)
except ZeroDivisionError:
print("Please don't divide by zero!")
Please don't divide by zero!
我们将导致错误的代码print(5/0)放在一个try代码块中。如果try代码块中的代码运行起来没问题,Python将跳过except代码块;
如果try代码块导致了错误,Python将查找这样的except代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。
如果try-except代码块后面还有代码,程序将接着运行。
3.try-except-else代码块处理异常
try-except-else代码块的工作原理大致如下:
Python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语句中。
有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码放在else代码块中。
except代码块告诉Python,如果它尝试运行try代码块中的代码时引用了指定的异常,该怎么办。
通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也能继续运行,从而能够抵御无意的用户错误和恶意的攻击。
4.两种常见异常
- 处理ZeroDivisionError异常
print("Enter Two Numbers now: ")
print("Enter 'q' to qiut")
while True:
first_number = input("\n First number: ")
if first_number=='q':
break
second_number = input("Second number: ")
try:
answer = int(first_number/)int(second_number)
except ZerroDivisionError:
print("Don't divide by 0!")
else:
print(answer)
Python执行try中的除法运算,这个代码可能出现错误。如果出现错误将执行except中的语句而不是报出traceback的错误。
依赖于try代码块成功执行的代码都放在else代码块中;此实例中如果除法运算成功,我们就使用else代码块来打印结果
- 处理FileNotFountError异常
filename = 'Test.txt'
try:
with open(filename) as file_project:
contents = file_project.read()
except FileNotFoundError:
message="Sorry, the file"+filenam+" does not exist!"
print(message)
在这个事例中,try代码引发FileNotFoundError异常,因此Python找出与该错误匹配的except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息,而不是traceback
Sorry, the file Test.txt does not exist.
5.pass语句
在Python中还有一个pass语句,可以在代码块中使用它来让Python什么都不做
try:
--snip--
except FileNotFoundError:
pass
else:
--snip--
pass语句还充当占位符,它提醒你在程序的某个地方什么都没有做,
并且以后也许要在这做什么。
若用户知道分析那些文件,他们可能希望在有文件没有分析时出现一条消息,并将其原因
告诉他们。如果用户只想看到结果,就无需在有些文件不存在时告知他们。向用户显示他
们不想看到的消息可能降低程序的可用性。Python的错误处理结构让你能够细致地控制与
用户分享错误信息的程度,要分享多少信息由你决定。