加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python - 异常处理

发布时间:2020-12-17 00:02:30 所属栏目:Python 来源:网络整理
导读:1,异常和错误 1,程序中难免出现错误,而错误分成两种 1,语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) span style="color: #008000;"# span style="color: #008000;"语法错误示范二 span style="color: #0000ff;"def span

1,异常和错误

1,程序中难免出现错误,而错误分成两种

1,语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)

<span style="color: #008000;">#<span style="color: #008000;">语法错误示范二
<span style="color: #0000ff;">def<span style="color: #000000;"> test:
<span style="color: #0000ff;">pass

<span style="color: #008000;">#<span style="color: #008000;">语法错误示范三
<span style="color: #0000ff;">print(haha

2,逻辑错误

num=input(>: <span style="color: #008000;">#<span style="color: #008000;">无法完成计算
res1=1/<span style="color: #000000;">0
res2
=1+<span style="color: #800000;">'
<span style="color: #800000;">str<span style="color: #800000;">'

2,什么是异常

异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下

3,python中的异常种类

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类) 去标识,不同的类对象标识不同的异常,一个异常标识一种错误.

l = [,3]
dic = {:]
s =

<div class="cnblogs_code" onclick="cnblogs_code_show('75205d5a-0cbe-45ed-8247-cb7278c24d59')">
<img id="code_img_closed_75205d5a-0cbe-45ed-8247-cb7278c24d59" class="code_img_closed" src="https://www.52php.cn/res/2019/02-14/22/1c53668bcee393edac0d7b3b3daff1ae.gif" alt=""><img id="code_img_opened_75205d5a-0cbe-45ed-8247-cb7278c24d59" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('75205d5a-0cbe-45ed-8247-cb7278c24d59',event)" src="https://www.52php.cn/res/2019/02-14/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt=""><div id="cnblogs_code_open_75205d5a-0cbe-45ed-8247-cb7278c24d59" class="cnblogs_code_hide">

/5+

2,异常处理

1,try/except 子句

在 Python 中,try/except?语句用于处理程序执行过程中出现的一些异常情况。

在?try?子句中,通常放置的是一个可能引发异常的操作,而处理异常的代码则在?except?子句中。

  • A:你的薪水是多少?
  • B:你猜?
= int(input(( %(结果一:
Please ener the salary:
10000<span style="color: #000000;">
So happy
10000<span style="color: #000000;">

结果二:
Please ener the salary: abc
It<span style="color: #800000;">'<span style="color: #800000;">s nor a numder!

这里,Python 将尝试处理?try?块中的所有语句,一旦发生异常(人家打听你工资,你非要说一个 “abc”),则控制流将立即传递到?except?块,并跳过?try?中的剩余语句。

注意 :?except?子句没有捕获特定异常,这并不是一个好的编程习惯。因为它会捕获所有的异常,并以相同的方式处理所有的情况。

2,捕获特定异常

一个?try?子句可以有任意数量的?except?子句,但只有一个将被执行,并且?except?子句可以指定捕获特定的异常。

来看一段伪代码:

<span style="color: #0000ff;">except<span style="color: #000000;"> ValueError:
<span style="color: #008000;">#<span style="color: #008000;"> 处理 ValueError 异常
<span style="color: #0000ff;">pass

<span style="color: #0000ff;">except<span style="color: #000000;"> (TypeError,ZeroDivisionError):
<span style="color: #008000;">#<span style="color: #008000;"> 处理多个异常 - TypeError 和 ZeroDivisionError
<span style="color: #0000ff;">pass

<span style="color: #0000ff;">except<span style="color: #000000;">:
<span style="color: #008000;">#<span style="color: #008000;"> 处理所有其他异常
<span style="color: #0000ff;">pass

通过使用元组,可以为except子句指定多个异常.

3,else 子句?

通常,如果不发生异常,我们往往会希望执行一些额外的代码,这可以通过?else?子句轻松地实现。

上述示例,我们将?print?语句直接放在?try?块中。这时,只有在转换语句不引发异常的情况下才执行该语句,但将其放在?else?块中才是更好的做法。

= int(input((( % salaey)

也就是说,try?块中唯一的代码应该是有潜在风险的单行(即:要处理的错误的来源)。老实说,大多数人不这样用。

4,finally 子句

另外,try?语句可以有一个可选的?finally?子句。无论什么情况,该子句都会被执行,通常用于释放外部资源。

例如,操作一个文件:

= open(,encoding=

一旦使用,无论文件是否打开成功,都必须清理资源。所以,在?finally?子句中使用?close(),可以确保即使发生异常,文件也能够被关闭

5,使用异常对象

异常对象包含的信息不仅仅是错误类型,也有一些其他信息.

要访问这些信息,需要能够访问异常对象,可以将其分配给一个变量,然后在?except?子句中使用:

= int(input(运行结果:
Please enter the salary:abc
invalid literal
<span style="color: #0000ff;">for
int() with base 10: <span style="color: #800000;">'
<span style="color: #800000;">abc
<span style="color: #800000;">'

注意:?err?不是字符串,但是 Python 知道如何将它转换为一个异常的字符串表示形式。

通常,这些异常信息不是很方便用户 - 如果想向用户报告错误,一般需要编写一个更具描述性的消息(说明错误与用户的某些行为相关)。这时,可以将异常消息与自己的消息相结合:

= int(input(( %运行:
Please enter the salary: abc
You entered incorrect salary: invalid literal
<span style="color: #0000ff;">for
int() with base 10: <span style="color: #800000;">'
<span style="color: #800000;">abc
<span style="color: #800000;">'

注意:?使用?%s?将一个变量插入到格式化的字符串中,也可以将变量转换为字符串。

6,抛出异常

在 Python 中,当发生运行时错误,就会出现相应的异常。此外,也可以使用关键字?raise?来强制引发。

还可以选择为异常传递值,以说明为什么会引发异常:

= int(input( salary <= ValueError( %( %( %运行:
Please enter the salary:
-10000<span style="color: #000000;">
You entered incorrect salary:
-10000 <span style="color: #0000ff;">is
<span style="color: #0000ff;">not
a valid age,salary must be positive.

薪资肯定是一个正整数,当输入一个负数或 0 时,我们可以抛出自己的?ValueError

注意:?之所以选择?ValueError?作为我们的异常类型,是因为它最适合这种错误。当然,这里也可以使用一个完全不合适的异常类,但应该尽量保持一致。

当这样做时,它与任何其他异常具有完全相同的效果 - 控制流将立即退出?try?子句,并传递给?except?子句。这个?except?子句也可以匹配我们的异常,因为它也是一个?ValueError

?也还可以自定义异常:

EvaException(BaseException): = EvaException((err)

断言:

<span style="color: #0000ff;">assert 1 == 1

<span style="color: #0000ff;">assert 1 == 2

try..except的方式比较if的方式的好处

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性?

使用try..except的方式

1:把错误处理和真正的工作分开来2:代码更易组织,更清晰,复杂的工作任务更容易实现;3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

注 :?

try...except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的这种东西加的多了,会导致你的代码可读性变差,只有在有些异常无法预知的情况下,才应该加上try...except,其他的逻辑错误应该尽量修正

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读