【问题标题】:Is there a way to catch RuntimeErrors when using os.system?使用 os.system 时有没有办法捕捉运行时错误?
【发布时间】:2018-12-21 13:20:58
【问题描述】:

我正在编写一个向 Google Lighthouse 的 CMD 发送命令的工具,并希望在 URL 无效时捕获错误。我会使用什么例外?

我目前正在尝试在输入无效 URL 时捕获异常中的 RuntimeError。

try:
    os.system("lighthouse --quiet {} {} {} {} {} --output-path={}/{}.html ".format(DevEmuStr,throttlingVar,CacheStr,presetVar,url,reportlocation,filename))
except RuntimeError:
    print("Please provide a proper URL")

我仍然得到的不是“请提供正确的 URL”:

Runtime error encountered: The URL you have provided appears to be invalid.
LHError: INVALID_URL
at lighthouse (C:\Users\sugar\AppData\Roaming\npm\node_modules\lighthouse\lighthouse-core\index.js:44:11)
at chromeP.then._ (C:\Users\sugar\AppData\Roaming\npm\node_modules\lighthouse\lighthouse-cli\run.js:182:12)
at process._tickCallback (internal/process/next_tick.js:68:7)

Lighthouse 只是继续下一个 URL

我还能发现另一个错误吗?

【问题讨论】:

  • LHError: INVALID URL?似乎是一个很好的提示
  • 现在尝试捕捉 LHError,可惜没有成功
  • os.system 不会抛出异常,它会返回错误代码。您必须检查 os.system == 0 是否,否则尝试获取执行进程的标准输出并确定错误。
  • @KSugar 我们有帮助吗,您还想知道更多吗?
  • 你们都很有帮助,但遗憾的是我仍然不太明白如何继续获取退出代码。我用 subprocess.check_output 尝试过,但这并没有给我正确的输出......

标签: python python-3.x error-handling runtimeexception lighthouse


【解决方案1】:

感谢所有试图帮助我的人,我终于找到了方法。

通过添加:

lh_url_ok = os.system("lighthouse --quiet {} {} {} {} {} --output-path={}/{}.html ".format(DevEmuStr,throttlingVar,CacheStr,presetVar,url,reportlocation,filename))
if lh_url_ok >0:
    print("Error")

我能够检查退出代码是否高于 0(0=没有错误)

【讨论】:

    【解决方案2】:

    不,您无法从 Python 捕获异常。

    在我看来,“遇到运行时错误”是由灯塔打印的输出,它不是您可以捕获的实际 Python 异常。

    Python 对以 os.system 开头的可执行文件的内部情况一无所知,您只能获取输出和退出代码。

    【讨论】:

    • 您能否详细说明我将如何继续获取退出代码?我在网上找到的所有方法都不适合我
    猜你喜欢
    • 2012-04-07
    • 2013-05-21
    • 2022-07-26
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多