【问题标题】:Python Error handling cant except error'sPython错误处理不能除了错误
【发布时间】:2018-10-04 11:49:23
【问题描述】:

我正在尝试这段代码:

try:
    res = subprocess.Popen('bgpq3 -4 {} -m 24 -l {}'.format('MAIyNT- 
AS38082','12414'), shell=True,
    universal_newlines=True,
    stdout=subprocess.PIPE).communicate()[0]
except Exception:
       print("Wrong")
       #do this code 

输出是?

ERROR:Unable to parse prefix 'MAIyNT-AS38082', af=2 (inet), ret=0
ERROR:Unable to parse prefix MAIyNT-AS38082
ERROR:Unable to add prefix MAIyNT-AS38082 (bad prefix or address-family)

所以我不能使用错误处理!!

有什么想法吗?

【问题讨论】:

  • 这些错误是来自stderr吗?
  • 不,因为当我使用没有标准错误和子进程的命令时!我得到同样的错误
  • 尝试: res = subprocess.Popen('bgpq3 -4 {} -m 24 -l {}'.format('MAIyNT- AS38082','12414') , shell=True, universal_newlines=是的,stdout=subprocess.PIPE).communicate()[0] 除了 Exception: print("Wrong") 这对我有用可能是您需要正确格式化代码
  • bgpq3 -4 MAIyNT-AS38082 -m 24 -l AS38082 结果同样的错误
  • 不适合我

标签: python error-handling


【解决方案1】:

当您编写except Exception: 时,您并没有捕捉到所有异常:系统退出错误和操作系统错误(如BaseExceptionSystemExitKeyboardInterruptGeneratorExit)@ 987654321@。

子进程的大部分异常都是OSError
由于您没有报告错误的完整回溯,我可能只假设您遇到了这些错误之一,您可以使用以下方法捕获它们:

except subprocess.CalledProcessError:

except OSError:

正如PEP 8 建议的那样,您不应单独使用except:,即使它适用于您的情况。
根据经验,请始终捕获您希望引发的确切异常!

【讨论】:

  • 你不是也有出现错误的那一行吗?
【解决方案2】:

您在这里只处理exception 类型的错误。您只需要使用except:。这样您就可以捕获代码中发生的所有错误。

try:
    #your code
except Exception as e:
    #handle the exception

有关更多信息,请参阅the docs 我从一个快速的 google 获得;)

【讨论】:

  • 感谢您的知识。 @Gsk我只是建议作为一个快速的肮脏修复。我编辑了我的答案。虽然你的更有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2016-09-13
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多