简述python的异常处理机制_python的中异常处理机制

什么是异常处理

定义:异常处理就是我们在写python时,经常看到的报错信息,例如;nameerror typeerror valueerror等,这些都是异常。

异常是一个事件,改事件会在程序执行过程中发生,影响程序的正常执行,一般情况下,在python中无法处理程序时就会发生异常,异常时python的一个对象,表示一个错误,当python脚本发生异常时,我们需要捕获并处理异常,否则程序就会终止执行。

python 使用被称为 异常 的特殊对象来管理程序执行期间发生的错误。每当发生让 python 不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个 traceback ,其中包含有关异常的报告。异常是使用 try-except 代码块处理的。 try-except 代码块让 python 执行指定的操作,同时告诉 python 发生异常时怎么办。使用了 try-except 代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的 traceback 。

处理zerodivisionerror异常

下面来看一种导致 python 引发异常的简单错误。你可能知道不能将一个数字除以 0 ,但我们还是让 python 这样做吧:

print(5/0)

报错:

traceback (most recent call last):

file "test.py", line 2, in

print(5/0)

zerodivisionerror: integer division or modulo by zero

使用 try-except 代码块

当你认为可能发生了错误时,可编写一个 try-except 代码块来处理可能引发的异常。你让 python 尝试运行一些代码,并告诉它如果这些代码引发了指定的异常,该怎么办。

处理 zerodivisionerror 异常的 try-except 代码块类似于下面这样:

try:

print(5/0)

except zerodivisionerror:

print("you can't divide by zero!")

# you can't divide by zero!

如果 try-except 代码块后面还有其他代码,程序将接着运行,因为已经告诉了 python 如何处理这种错误。

使用异常避免崩溃

发生错误时,如果程序还有工作没有完成,妥善地处理错误就尤其重要。这种情况经常会出现在要求用户提供输入的程序中;如果程序能够妥善地处理无效输入,就能再提示用户提供有效输入,而不至于崩溃。

创建一个只执行除法运算的简单计算器:

print("give me two numbers, and i'll divide them.")

print("enter 'q' to quit.")

while true:

first_number = input("\nfirst number: ")

if first_number == 'q':

break

second_number = input("second number: ")

try:

answer = int(first_number) / int(second_number)

except zerodivisionerror:

print("you can't divide by 0!")

else:

print(answer)

try-except-else 代码块的工作原理大致如下:

python 尝试执行 try 代码块中的代码;只有可能引发异常的代码才需要放在 try 语句中。有时候,有一些仅在 try 代码块成功执行时才需要运行的代码;这些代码应放在 else 代码块中。 except 代码块告诉 python ,如果它尝试运行 try 代码块中的代码时引发了指定的异常,该怎么办。

通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也能继续运行,从而能够抵御无意的用户错误和恶意的攻击。

处理 filenotfounderror 异常

filenotfounderror 错误是函数 open() 导致的,因此要处理这个错误,必须将 try 语句放在包含 open() 的代码行之前:

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)

处理多个文件

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 = ['a.txt', 'b.txt', 'c.txt', 'd.txt']

for filename in filenames:

count_words(filename)

异常时保持静默

要让程序在失败时一声不吭,可像通常那样编写 try 代码块,但在 except 代码块中明确地告诉 python 什么都不要做。 python 有一个 pass 语句,可在代码块中使用它来让 python 什么都不要做:

def count_words(filename):

""" 计算一个文件大致包含多少个单词 """

try:

with open(filename) as f_obj:

contents = f_obj.read()

except filenotfounderror:

pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值