永发信息网

Python没有状态代码行,错误是指问题,怎么解决

答案:1  悬赏:30  手机版
解决时间 2021-04-07 17:49
Python没有状态代码行,错误是指问题,怎么解决
最佳答案
这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章

事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章。什么?你还不知道什么是异常,额...

1.Python异常类

Python是面向对象语言,所以程序抛出的异常也是类。常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了)。

异常描述
NameError尝试访问一个没有申明的变量
ZeroDivisionError除数为0
SyntaxError语法错误
IndexError索引超出序列范围
KeyError请求一个不存在的字典关键字
IOError输入输出错误(比如你要读的文件不存在)
AttributeError尝试访问未知的对象属性
ValueError传给函数的参数类型不正确,比如给int()函数传入字符串形
2.捕获异常
Python完整的捕获异常的语句有点像:
复制代码代码如下:

try:
try_suite
except Exception1,Exception2,...,Argument:
exception_suite
...... #other exception block
else:
no_exceptions_detected_suite
finally:
always_execute_suite

额...是不是很复杂?当然,当我们要捕获异常的时候,并不是必须要按照上面那种格式完全写下来,我们可以丢掉else语句,或者finally语句;甚至不要exception语句,而保留finally语句。额,晕了?好吧,下面,我们就来一一说明啦。
2.1.try...except...语句
try_suite不消我说大家也知道,是我们需要进行捕获异常的代码。而except语句是关键,我们try捕获了代码段try_suite里的异常后,将交给except来处理。
try...except语句最简单的形式如下:
复制代码代码如下:

try:
try_suite
except:
exception block

上面except子句不跟任何异常和异常参数,所以无论try捕获了任何异常,都将交给except子句的exception block来处理。如果我们要处理特定的异常,比如说,我们只想处理除零异常,如果其他异常出现,就让其抛出不做处理,该怎么办呢?这个时候,我们就要给except子句传入异常参数啦!那个ExceptionN就是我们要给except子句的异常类(请参考异常类那个表格),表示如果捕获到这类异常,就交给这个except子句来处理。比如:
复制代码代码如下:

try:
try_suite
except Exception:
exception block

举个例子:
复制代码代码如下:

>>> try:
... res = 2/0
... except ZeroDivisionError:
... print "Error:Divisor must not be zero!"
...
Error:Divisor must not be zero!

看,我们真的捕获到了ZeroDivisionError异常!那如果我想捕获并处理多个异常怎么办呢?有两种办法,一种是给一个except子句传入多个异常类参数,另外一种是写多个except子句,每个子句都传入你想要处理的异常类参数。甚至,这两种用法可以混搭呢!下面我就来举个例子。
复制代码代码如下:

try:
floatnum = float(raw_input("Please input a float:"))
intnum = int(floatnum)
print 100/intnum
except ZeroDivisionError:
print "Error:you must input a float num which is large or equal then 1!"
except ValueError:
print "Error:you must input a float num!"
[root@Cherish tmp]# python test.py
Please input a float:fjia
Error:you must input a float num!
[root@Cherish tmp]# python test.py
Please input a float:0.9999
Error:you must input a float num which is large or equal then 1!
[root@Cherish tmp]# python test.py
Please input a float:25.091
4

上面的例子大家一看都懂,就不再解释了。只要大家明白,我们的except可以处理一种异常,多种异常,甚至所有异常就可以了。
大家可能注意到了,我们还没解释except子句后面那个Argument是什么东西?别着急,听我一一道来。这个Argument其实是一个异常类的实例(别告诉我你不知到什么是实例),包含了来自异常代码的诊断信息。也就是说,如果你捕获了一个异常,你就可以通过这个异常类的实例来获取更多的关于这个异常的信息。例如:
复制代码代码如下:

>>> try:
... 1/0
... except ZeroDivisionError,reason:
... pass
...
>>> type(reason)

>>> print reason
integer division or modulo by zero
>>> reason
ZeroDivisionError('integer division or modulo by zero',)
>>> reason.__class__

>>> reason.__class__.__doc__
'Second argument to a division or modulo operation was zero.'
>>> reason.__class__.__name__
'ZeroDivisionError'

上面这个例子,我们捕获了除零异常,但是什么都没做。那个reason就是异常类ZeroDivisionError的实例,通过type就可以看出。
2.2try ... except...else语句
现在我们来说说这个else语句。Python中有很多特殊的else用法,比如用于条件和循环。放到try语句中,其作用其实也差不多:就是当没有检测到异常的时候,则执行else语句。举个例子大家可能更明白些:
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
穿越火线中标准的比赛装备是哪些?
芯泰电脑地址在哪,我要去那里办事
the face shop香港专卖店地址
贞香阁(蒲鞋市)在哪里啊,我有事要去这个地方
五菱荣光早晨起动很难挂挡
成立土地开发整理公司需要哪些人脉关系?搞好
形容想念的程度的词
河北石家庄姓郄的分布在什么县什么镇什么村最
女生1米68到1米75算高吗?
求我的公主插曲罗马音
在幻灯片中插入的视频什么格式的最好
一个教室长l0m,宽5m,高4m,要粉刷教室四壁和房
貔貅和虎相冲吗???属虎女 我是公历12月6日
泗洪宝迪种猪科技有限公司地址在哪,我要去那
卖野生的野猪犯法吗
推荐资讯
在高密市做什么生意好
水果店运来一批苹果,第一天卖出总数的3/10,
怎么开时尚品牌女装加盟店
昨晚我梦见吃鱼了什么意思??
荣耀战魂刀千怎么打 荣耀战魂困难模式刀千打
edc的男装的简介
离开PS的女星们是怎样的
我和一位高冷的女生做同桌,一天,学校要结业
诈骗电话经典语录,劝一个女感情骗子回头的经
完美芦荟胶能吃吗,完美芦荟胶怎么样?补水保
ios12可以用了吗
在vb中1=2 3 4 5怎么写?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?