运维少年系列 python and cisco (3)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了运维少年系列 python and cisco (3),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4648字,纯文字阅读大概需要7分钟。
内容图文
![运维少年系列 python and cisco (3)](/upload/InfoBanner/zyjiaocheng/808/296e72fb4ffd40d48174925ab570c1e7.jpg)
运维少年系列 python and cisco (3)
异常处理
什么是异常处理?
异常处理通常来说是对程序在执行时(非编译时)出现的各种报错进行处理,如果没有异常处理,那么在程序出错的时候,整个程序会立即退出,而做了异常处理之后,程序会根据异常定义的方式进行错误处理。
通俗来讲:如果没有异常处理,那程序出错的时候就GG了
系列文章常见的异常
这个系列的文章常见的异常有哪些呢?
连接失败
连接失败的原因有很多种,比如网络不通啦、端口没开啦…
连接失败抛出的异常如下
[root@yunwei?cisco]#?python?ywsn_p_c_lab3.py?
Traceback?(most?recent?call?last):
??File?"ywsn_p_c_lab3.py",?line?9,?in?<module>
????s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)
??File?"/usr/lib/python2.7/site-packages/paramiko/client.py",?line?362,?in?connect
????raise?NoValidConnectionsError(errors)
paramiko.ssh_exception.NoValidConnectionsError:?[Errno?None]?Unable?to?connect?to?port?22?on?192.168.200.2
[root@yunwei?cisco]#?
做异常处理的时候,我们需要关注的是什么呢?就是异常抛出的代码,比如这里的paramiko.ssh_exception.NoValidConnectionsError
如何做异常处理?在python中异常处理使用try:... expect...
,如
import?paramiko
import?time
user?=?'yunwsn'
passwd?=?'123456'
s?=?paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
IP?=?file('IP.txt','rb')
for?ip?in?IP.xreadlines():
????try:??#?异常处理以下内容
????????s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)??#?如果这里出现异常,那么直接到execpt代码块中去了,不会打印下面的成功
????????print?'[?\033[0;32m?success\033[0m?]?login?%s?'?%ip
????except?paramiko.ssh_exception.NoValidConnectionsError:
????????print?'[?\033[0;32m?failed?\033[0m?]?Unable?to?connect?to?%s?'?%?ip
IP.close()
运行一下(动图)
![运维少年系列 python and cisco (3) - 文章图片](/upload/getfiles/0001/2021/5/5/20210505020556949.jpg)
socket超时
异常如下,有时候由于网络质量不好或者IP不存在,导致socket连接超时(任何连接都是基于socket的),出现以下异常
Traceback?(most?recent?call?last):
??File?"ywsn_p_c_lab3.py",?line?11,?in?<module>
????s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)
??File?"/usr/lib/python2.7/site-packages/paramiko/client.py",?line?343,?in?connect
????retry_on_signal(lambda:?sock.connect(addr))
??File?"/usr/lib/python2.7/site-packages/paramiko/util.py",?line?280,?in?retry_on_signal
????return?function()
??File?"/usr/lib/python2.7/site-packages/paramiko/client.py",?line?343,?in?<lambda>
????retry_on_signal(lambda:?sock.connect(addr))
??File?"/usr/lib64/python2.7/socket.py",?line?224,?in?meth
????return?getattr(self._sock,name)(*args)
socket.error:?[Errno?110]?Connection?timed?out
这里抛出的异常代码就是socket.error
,可以看到这个是socket
模块的报错,如果我们要处理这种异常的话,那么需要导入socket
模块才可以。
认证失败
由于我们在这个系列文章中使用的是ssh的办法,所以会有验证的过程,所以验证失败也是常见的一种异常方式。
来看一下认证失败抛出的异常
??File?"ywsn_p_c_lab3.py",?line?11,?in?<module>
????s.connect(ip,username=user,password='123',look_for_keys=False,allow_agent=False)
??File?"/usr/lib/python2.7/site-packages/paramiko/client.py",?line?437,?in?connect
????passphrase,
??File?"/usr/lib/python2.7/site-packages/paramiko/client.py",?line?749,?in?_auth
????raise?saved_exception
paramiko.ssh_exception.AuthenticationException:?Authentication?failed.
那么这里的异常代码是什么呢?肯定是paramiko.ssh_exception.AuthenticationException: Authentication failed.
啦~
这里如何做异常处理我就不多说了吧!大家可以参照上面的自己验证一下。
拓扑说明
拓扑图
![运维少年系列 python and cisco (3) - 文章图片](/upload/getfiles/0001/2021/5/5/20210505020557248.jpg)
说明
我会在IP.txt中写入4个IP,两个在拓扑图中,一个另两个不在,实现网络不通、超时、验证失败、一切ok着三种情况。
实现代码
这里为了方便大家看,我就把所有的异常分开了,其实放在一起也是可以的。以下对新代码进行注释,其余代码注释可以查看前两篇文章。
import?paramiko
import?socket??#?导入socket模块
import?time?
user?=?'yunwsn'
passwd?=?'123456'
s?=?paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
IP?=?file('IP.txt','rb')
for?ip?in?IP.xreadlines():
????try:??#?异常处理
????????s.connect(ip,username=user,password=passwd,timeout=5,look_for_keys=False,allow_agent=False)
????????print?'[?\033[0;32m?success\033[0m?]?login?%s?'?%ip
????????cmd?=?s.invoke_shell()
????????cmd.send('show?ip?int?bri?\n??')
????????time.sleep(0.1)
????????output?=?cmd.recv(65535)
????????print?output
????????cmd.close()
????except?paramiko.ssh_exception.NoValidConnectionsError:?#?网络/端口不通异常
????????print?'[?\033[0;31m?failed?\033[0m?]?Unable?to?connect?to?%s?'?%?ip
????except?socket.error,err:??#?超时异常,err代表异常代码之后的提示
????????print?'[?\033[0;31m?failed?\033[0m?]?%s?to?%s'?%(err,ip)
????except?paramiko.ssh_exception.AuthenticationException:?#?验证失败的异常
????????print?'[?\033[0;31m?failed?\033[0m?]?Authentication?failed?on?%s'?%?ip
IP.close()
IP.txt
192.168.108.252
192.168.108.253
192.168.108.254
192.168.108.251
运行效果(动图)
![运维少年系列 python and cisco (3) - 文章图片](/upload/getfiles/0001/2021/5/5/20210505020557437.jpg)
微信公众号:运维少年
内容总结
以上是互联网集市为您收集整理的运维少年系列 python and cisco (3)全部内容,希望文章能够帮你解决运维少年系列 python and cisco (3)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。