python3.8学习⼼得(4)异常处理⼀、常见的内置异常
BaseException:所有异常的基类。
System Exit:Python解释器请求退出。
KeyboardInterrupt:⽤户中断执⾏。
Exception:常规错误的基类。
StopIteration:迭代器没有更多的值。
GeneratorExit:⽣成器(generator)发⽣异常通知退出。
StandardError:所有内置标准异常的基类。
ArithmeticError:所有数值计算错误的基类。
FloatingPointError:浮点计算错误。
OverflowError:数值运算超出最⼤限制
ZeroDivisionError:除(或取模)零(所有数据类型)。
AssertionError:断⾔语句失败。
AttributeError:对象没有这个属性。
EOFError:没有内建输⼊,到达EOF标记。
EnvironmentError:操作系统错误的基类。
IOError:输⼊/输出操作失败。
OSError:操作系统错误。
WindowsError:系统调⽤失败。
ImportError:导⼊模块/对象失败。
LookupError:⽆效数据查询的基类。
IndexError:序列中没有此索引(index)。
KeyError:映射中没有这个键。
MemoryError:内存溢出错误(对于python解释器不是致命的)。
NameError:未声明/初始化对象(没有属性)。
UnboundLocalError:访问未初始化的本地变量。
ReferenceError:弱引⽤(weak reference)试图访问以及垃圾回收的对象。
RuntimeError:⼀般的运⾏时错误。
NotImplementedError:尚未实现的⽅法。
SyntaxError:Python语法错误。
IndentationError:缩进错误。
TabError: Tab和空格混⽤。
SystemError:⼀般的解释器系统错误。
TypeError:对类型⽆效的操作
ValueError:传⼊⽆效的参数。
UnicodeError:Unicode相关的错误。
UnicodeDecodeError:Unicode解码时的错误。
UnicodeEncodeError:Unicode编码时的错误。
UnicodeTranslateError:Unicode转换时的错误。
Warning:警告的基类。
DeprecationWarning:关于被弃⽤的特征的警告。
FutureWarning:关于构造将来语义会有改变的警告。
OverflowWarning:旧的关于⾃动提升为长整型(Long)的警告。
PendingDeprecationWarning:关于特性将会被废弃的警告。
RuntimeWarning:可疑的运⾏时⾏为(runtime behavior)的警告。
SyntaxWarning:可疑的语法的警告。
UserWarning:⽤户代码⽣成的警告。
⼆、使⽤pt语句处理异常
此语句可以⽤于处理python所输出的异常。
语法格式如下:
try:
<;语句>
except[<;异常的名称>[,<;异常类的实例变量名称>]]:
<;异常的处理语句>
[else:
<;没有异常产⽣时的处理语句>]
1.执⾏try⼦句,在关键字try和关键字except之间的语句。
2.如果没有异常发⽣,就忽略except⼦句,try⼦句执⾏后结束。
3.如果在执⾏try⼦句的过程中发⽣了异常,那么try⼦句余下的部分将被忽略。如果异常的类型和excet之后的名称相符,那么对应的except⼦句将被执⾏。
4.如果⼀个异常没有与任何的except匹配,那么这个异常将会传递到上层的try中。
值得注意的是:异常的名称可以是空⽩的,表⽰此except语句处理所有类型的异常。异常的名称也可以是⼀个或多个。可以使⽤不同的except语句处理不同的异常。else语句之内的语句是没有异常发⽣时的处理程序。
三、使⽤else语句来处理异常
使⽤else语句时,⼀定要有except语句才⾏。在没有发⽣异常时,会执⾏else⼦句的流程。由此可见,当程序没有发送异常时,通过添加⼀个else⼦句,可以帮助我们更好地判断程序的执⾏情况。
def get(n):
try:
if n==100:
data=s[4]
elif 200<=n<=500:
file=open(100,200,300)
except:
print("有错误发⽣")
else:
print("没有错误发⽣")
get(100)
get(200)
get(300)
输出结果如下显⽰:
有错误发⽣
有错误发⽣
没有错误发⽣
四、使⽤pass语句来处理异常
a=["100","200","苹果","⾹蕉","100"]
sm=0
for n in a:
try:
sm+=int(n)
except:
pass
print(sm)
输出结果如下显⽰:
400
从运⾏结果可以看出,sm的值时是可转换的三个元素("100","200"和"100")的和。上述代码中的Int()函数将字符串转换为整数。当int()函数⽆法将字符串转换为整数时,就会输出valueError的异常。在except语句内使⽤pass语句可以忽略所发⽣的valueError异常。
五、清除异常,使⽤finally语句
下⾯是⽰例是没有异常发⽣,finally语句内的程序代码还是被执⾏。
try:
a=100
finally:
print('异常以及清楚啦')
输出结果如下显⽰
异常以及清楚啦python的try和except用法
下⾯⽰例发⽣了valueError异常,finally语句内的程序代码还是被执⾏。
try:
raise ValueError
finally:
print('异常已经清楚啦')
输出结果如下所⽰:
raise ValueError
valueError
六、抛出异常
使⽤raise语句可以抛出⼀个指定的异常。例如:
raise NameError('这⾥使⽤raise抛出⼀个异常’)
输出结果如下所⽰:
raise NameError('这⾥使⽤raise抛出⼀个异常’)
NameError:这⾥使⽤raise抛出⼀个异常
raise 唯⼀的⼀个参数指定了要被抛出的异常。它必须是⼀个异常的实例或异常的类(Exception的⼦类)。
值得注意的是:如果⽤户只想判断是否会抛出⼀个异常,⽽不想去处理它,那么此时使⽤raise语句是最佳的选择。
七、离开嵌套循环
我们知道,如果想离开循环,就使⽤break语句,但是如果在⼀个嵌套循环之内,break语句只能离开最内层的循环,⽽不能离开嵌套循环,此时就可以使⽤raise语句离开嵌套循环。
⽰例如下:
class ExitLoop(Exception):
pass
try:
i=1
while i<10:
for j in range(1,10):
print(i,j)
if (i==2) and (j==2):
raise(ExitLoop)
i+=1
Except ExitLoop:
print("当i=2 j=2时离开嵌套循环")
输出结果如下显⽰:
1 1
2 2
当i=2 j=2时离开嵌套循环
python⽀持使⽤类输出异常。类可以时python的内置异常,也可以时⽤户⾃定义异常。使⽤类输出异常是⽐较好的⽅式,因此捕捉异常时更有弹性。
⼋、⾃定义异常
除了内置异常,python也⽀持⽤户⾃定义异常。⽤户⾃定义异常与内置异常并五差别,只是内置异常时定义在exception模块中。当python解释器启动时,exceptions模块就会事先加载。
python允许⽤户定义⾃⼰的异常类,并且⽤户⾃定义的异常类必须从任何⼀个Python内置异常类派⽣⽽来。
下⾯的⽰例是使⽤python的内置exception异常类作为基类,创建⼀个⽤户⾃定义的异常类URLError.
class URLError(Exception):
pass
try:
raise URLError("这是URL异常")
except URLError as inst:
print(inst.args[0])
输出结果如下所⽰:
这是URL异常
inst变量是⽤户⾃定义异常类URLError的实例变量,inst.args就是该⽤户定义异常类的args属性值。还可以将所创建的⽤户⾃定义异常类,再当作其他⽤户⾃定义异常类的基类。。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论