在发布本文之前,我查看了关于SO的一些参考文献,但没有提供答案,包括:
how-to-catch-inner-exception-in-python
during-handling-of-the-above-exception-another-exception-occurred-python-program
how-to-suppress-displaying-the-parent-exception
我想忽略(而不是打印)Python 3中的嵌套异常。我正在使用Fabric从主机列表中获取用户名列表。我无权访问的一台主机抛出异常。我要打印自定义消息并继续执行列表。这在大多数情况下都有效,但是我也遇到了try
不会捕获的内部异常。我已经尝试了嵌套try
,但无法按预期进行(捕获内部异常)。
第一个代码:
try:
blah = c.run ("awk -F ':' '{ print $1 }' /etc/passwd", hide=True)
except:
print (" didn't work")
出现以下错误:
异常:读取SSH协议标语时出错 追溯(最近一次通话): _check_banner中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/transport.py”,第2211行 buf = self.packetizer.readline(timeout) 在读取行中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/packet.py”,第380行 buf + = self._read_timeout(超时) _read_timeout中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/packet.py”,第622行 提高socket.timeout() socket.timeout
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近): 运行中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/transport.py”,行2039 self._check_banner() _check_banner中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/transport.py”,第2216行 “读取SSH协议标语时出错” + str(e) paramiko.ssh_exception.SSHException:读取SSH协议标题时出错
没有工作
如您所见,第一个异常已按预期捕获,但Fabric调用Paramiko引发了另一个异常。我想忽略并且绝对不打印Paramiko异常。
我尝试如下嵌套try/except
并收到相同的输出。
try:
try:
blah = c.run("awk -F ':' '{ print $1 }' /etc/passwd", hide=True)
except:
print("inner error")
except:
print("outer error")
异常:读取SSH协议标语时出错 追溯(最近一次通话): _check_banner中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/transport.py”,第2211行 buf = self.packetizer.readline(timeout) 在读取行中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/packet.py”,第380行 buf + = self._read_timeout(超时) _read_timeout中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/packet.py”,第622行 提高socket.timeout() socket.timeout
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近): 运行中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/transport.py”,行2039 self._check_banner() _check_banner中的文件“ /Users/blah/.local/lib/python3.6/site-packages/paramiko/transport.py”,第2216行 “读取SSH协议标语时出错” + str(e) paramiko.ssh_exception.SSHException:读取SSH协议标题时出错
内部错误
更新
我发现,当我将结果输出到文件中时,我正确地获得了print
命令,但是异常仍然出现在屏幕上。有什么办法抑制这种情况?