Python的错误处理不能除错误的

时间:2018-10-04 11:49:24

标签: python error-handling

我正在尝试以下代码:

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)

所以我无法使用错误处理!

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

在编写except Exception:时,您并没有捕获到 all 例外:系统退出错误和操作系统错误(如BaseExceptionSystemExit,{{1 }}和KeyboardInterruptare excluded

子流程的大多数例外是OSError
由于您没有报告该错误的完整追溯,因此我只能假设您遇到了这些错误之一,可以使用以下命令捕获它们:

GeneratorExit

except subprocess.CalledProcessError:

正如PEP 8所建议的那样,即使可以使用except OSError: ,也不要单独使用except:
根据经验,请务必捕获您希望引发的 exact 异常!