python处理exception的语句try except语句的介绍

python处理exception的语句try except语句的介绍我们在运行程序的时候,即使我们的逻辑和语法都是正确的,有时候也会因为用户的输入错误或其他的不一致导致会出现一些exception例外,这就需要我

大家好,欢迎来到IT知识分享网。python处理exception的语句try

我们在运行程序的时候,即使我们的逻辑和语法都是正确的,有时候也会因为用户的输入错误或其他的不一致导致会出现一些exception例外,这就需要我们来处理这些exception,以使得程序可以顺畅优雅的运行下去。

在本篇文章中,我主要想分享try except语句的一般使用语法,然后处理简单的代码例子,讨论下会出现什么错误,提供正确的使用try except的方法。

try except的语法块格式

我们先来理解python中try except语句的语法。一般的格式如下:

try:
	#这里执行我们想要执行的代码
except <error type>:
	#在这里处理上面try的代码运行产生的错误
  #如果try内代码执行出现错误,这里的代码将运行
else:
	#如果try代码执行顺利,没有出现错误
  #将会执行这里的代码
finally:
	#无论是否出现错误,这里的代码都会执行
  • try块 你想要执行的代码放到try里面,由于exception,运行时可能会出现错误。我们可以遇见到这里可能会出现的错误或exception
  • except块,在try执行代码出现错误时执行。包含一系列的信息,给我们一些上下文的提示,大概是哪一部分出了问题,出现了什么类型的问题。
  • 在except中你应该一直都指明你想要处理的错误类型。
  • 你也可能会不指定错误的类型,但在实践中不推荐这么做。你不可能罗列出所有可能发生的所有错误。
  • 执行try块代码时,可能会出现多个错误类型。你需要尽可能多地用except语句罗列出每一个你能想到的错误。
  • else块只有在try执行没有出现错误时才触发。在try执行完后,如果你有后续的操作需要执行时会比较有用。比如你在try中打开了一个文件,在else中你可能会需要读取它的内容。
  • finally块永远都会执行,无论是否出现错误。如果代码执行完后,你想释放一些资源时会有用。
  • else和finally块是可选的。大多数情况下你可以只用try来执行代码,用except来处理exception.

下面我们举几个例子来学习一下python中如何处理exceptions。

python处理ZeroDivisionError

下面的代码时一个除法的函数

def divide(num,div):
	return num/div

调用这个函数可以得到预期的结果

res = divide(100,8)
print(res)

# 输出
12.5

res = divide(568,64)
print(res)

# 输出
8.875

当用下面的方法调用函数时就会出现错误

divide(27,0)

程序会出错,并提示出现一个ZeroDivisionError的错误

ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-19-932ea024ce43> in <module>()
----> 1 divide(27,0)

<ipython-input-1-c98670fd7a12> in divide(num, div)
      1 def divide(num,div):
----> 2   return num/div

ZeroDivisionError: division by zero

你可以用下面的方法来处理这个错误:

  • 在try里面,调用函数divide,基本上就是想用num除div
  • 在except里面,处理div等于0的情况
  • 在这个例子中,你可以打印出一个提示信息给用户
try:
    res = divide(num,div)
    print(res)
except ZeroDivisionError:
    print("您在尝试用一个数去除以0....")

如果输入正确,函数仍然可以正常得到结果:

divide(10,2)
# 输出
5.0

如果尝试除以0,将会收到提示有错误发生,程序会很顺畅地结束。

divide(10,0)
# 输出
您在尝试用一个数去除以0....

python处理TypeError的exception

在这个部分,我分享一下如何在python中使用try except语句来处理Type Error

下面的函数代码接收一个数字作为参数,加10后返回结果

def add_10(num):
  return num + 10

你可以传入任何数字作为参数给这个函数,都可以正常返回结果

result = add_10(89)
print(result)

#输出
99

现在如果试着用”5″代替5:

add_10("5")

你将会看到程序终止,并出现下面的错误

TypeError                                 Traceback (most recent call last)
<ipython-input-15-9844e949c84e> in <module>()
----> 1 add_10("five")

<ipython-input-13-2e506d74d919> in add_10(num)
      1 def add_10(num):
----> 2   return num + 10

TypeError: can only concatenate str (not "int") to str

错误提示你:数字和字符串不能进行运算或连接

可以采用这个方法来处理:

  • 定义一个数字,在try中调用函数add_10,把定义的变量作为参数,如果参数是有效的类型,则正常返回结果
  • 否则,except中的TypeError触发,提示用户参数的类型错误
my_num = "five"
try:
  result = add_10(my_num)
  print(result)
except TypeError:
  print("参数必须时一个数字类型")

因为现在我们已经对TypeError进行了处理,现在只是会收到一个提示

参数必须时一个数字类型

python处理IndexError

如果你以前跟python的列表list打过交道,你可能已经碰到过IndexError。因为跟踪记录list的item变化是有困难的,你可能会尝试访问一个无效的list的index.

在这个例子里,列表my_list有四个item。有效的index为0,1,2,3。如果你使用负指数的话,有效的index为-1,-2,-3,-4.

2为有效的index,所以我们可以看到2上的项,也就是c++被打印出来。

my_list = ["Python","C","C++","JavaScript"]
print(my_list[2])

#输出
C++

如果你访问超出范围的index,将会碰到IndexError错误

print(my_list[4])
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-7-437bc6501dea> in <module>()
      1 my_list = ["Python","C","C++","JavaScript"]
----> 2 print(my_list[4])

IndexError: list index out of range

如果你已经熟悉了try except的模式的话,你就会使用这个语句来处理相关的错误

在下面的代码中,通过search_idx来访问列表内的项。

search_idx = 3
try:
  print(my_list[search_idx])
except IndexError:
  print("对不起,访问的index超出范围")

因为3为有效的index,所以指定的项目是可以正确的打印出来的

JavaScript

如果search_idx在有效的index范围之外,except会捕捉到IndexError,不会出现一大串的错误信息,而是显示我们自定义的提示信息。

对不起,访问的index超出范围

python处理KeyError

在处理python的dictionary数据类型时,你可能已经遇到过KeyError

如下的例子为my_dict.

my_dict ={"key1":"value1","key2":"value2","key3":"value3"}
search_key = "non-existent key"
print(my_dict[search_key])
  • dictionary my_dict有三个键值对,”key1″:”value1″,”key2″:”value2″,”key3″:”value3″
  • 现在,你尝试访问的是my_dict的键”non-existent key”

所以,你会碰到这个KeyError错误

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-2-2a61d404be04> in <module>()
      1 my_dict ={"key1":"value1","key2":"value2","key3":"value3"}
      2 search_key = "non-existent key"
----> 3 my_dict[search_key]

KeyError: 'non-existent key'

你可以按照处理IndexError的方法来处理KeyError

  • 尝试访问my_dict中的search_key
  • 如果search_key是有效的,则相应地值被输出
  • 如果由于访问不存在的键,使用except来提示用户
try:
  print(my_dict[search_key])
except KeyError:
  print("对不起,您访问的是一个无效的Key!")
对不起,您访问的是一个无效的Key!

你还可以把捕获到的错误作为error_msg打印出来,作为用户的提示。

try:
  print(my_dict[search_key])
except KeyError as error_msg:
  print(f"对不起,{error_msg} 不是一个有效的key!")

现在的输出如下:

对不起,‘non-existent key’ 不是一个有效的key!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/13132.html

(0)
上一篇 2024-03-08 11:33
下一篇 2024-03-08 12:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信