python自动运维抓取数据时失败_Python 异常处理(自动化运维-10)

异常简介

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是显示一个提示的页面。

Python 内置了一套try...except...finally...的错误处理机制。

示例代码:

try:

print('try...')

r = 10 / 0

print('result:', r)

except ZeroDivisionError as e:

print('except:', e)

finally:

print('finally...')

print('END')

#执行结果

try...

except: division by zero

finally...

END

当错误发生时,后续语句print('result:', r)不会被执行,except由于捕获到ZeroDivisionError,因此被执行。最后,finally语句被执行。然后,程序继续按照流程往下走。

如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句:

异常种类

AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x

IOError 输入/输出异常;基本上是无法打开文件

ImportError 无法引入模块或包;基本上是路径问题或名称错误

IndentationError 语法错误(的子类) ;代码没有正确对齐

IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 试图访问字典里不存在的键

KeyboardInterrupt Ctrl+C被按下

NameError 使用一个还未被赋予对象的变量

SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

TypeError 传入对象类型与要求的不符合

UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,

导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

异常实例

IndexError

# 没有异常各个代码快执行状态

a = list(range(8))

print(a)

try:

x = a[0]

print(x) # 没有异常打印这个

except IndexError as e:

print(e)

else:

print("没有异常执行这个")

finally:

print("无论有无异常都执行")

print("end")

#====执行结果====

[0, 1, 2, 3, 4, 5, 6, 7]

0

没有异常执行这个

无论有无异常都执行

end

# 有异常代码块执行状态

a = list(range(8))

print(a)

try:

x = a[10]

print(x) # 没有异常打印这个

except IndexError as e: # 捕获错误

print(e) # 打印错误

else:

print("没有异常执行这个")

finally:

print("无论有无异常都执行")

print("end")

#====执行结果====

[0, 1, 2, 3, 4, 5, 6, 7]

list index out of range

无论有无异常都执行

end

万能异常

name = "bushaoxun"

try:

int(name)

print("ok") # 捕获到错误不执行.

except Exception as e: # 万能异常,捕获各种异常

print(e)

# 执行结果

invalid literal for int() with base 10: 'bushaoxun'

主动触发异常,抛出错误

class x(ValueError): # 错误是一个类,捕获错误就是捕获类的一个实例

pass

try:

raise x("我是一个兵") # 抛出错误

except x as e:

print(e) #捕获错误

raise # raise语句如果不带参数,就会把当前错误原样向上抛出

# 执行结果

我是一个兵

Traceback (most recent call last):

File "C:/Users/bushaoxun/PycharmProjects/Learning/day2/yicang.py", line 11, in

raise x("我是一个兵") # 抛出错误

__main__.x: 我是一个兵

断言

assert 表达式  “抛出异常的值”

def foo(s):

n = int(s)

assert n != 0, 'n is zero!' # 如果 n !=0 不为真,抛出断言错误 AssertionError: n is zero!

return 10 / n

def main():

foo('0')

try:

main()

except Exception as e:

print(e)

# 执行结果

n is zero!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值