小能豆

Python try 块不捕获 os.system 异常

python

我有这个Python代码:

import os
try:
  os.system('wrongcommand')
except:
  print("command does not work")

代码打印:

wrongcommand: command not found

代替command does not work。有谁知道为什么它不打印我的错误消息?


阅读 73

收藏
2024-05-14

共1个答案

小能豆

在这个代码中,尽管你使用了try-except语句来捕获异常,但是os.system()函数并不会引发一个Python异常。相反,它会将错误信息输出到标准错误(stderr),而不会引发异常。

为了捕获并处理os.system()的错误信息,你可以使用subprocess模块。以下是如何修改你的代码:

import subprocess

try:
    subprocess.check_call('wrongcommand', shell=True)
except subprocess.CalledProcessError:
    print("command does not work")

在这个修改后的代码中:

  • 我们使用subprocess.check_call()来执行命令。
  • 如果命令返回非零的退出状态码,subprocess.CalledProcessError异常将被引发。
  • 在except语句中,我们只打印”command does not work”,而不是错误消息。因为subprocess.check_call()默认会将错误信息输出到标准错误(stderr)。

这样,你就可以捕获并处理由os.system()引发的错误信息。

2024-05-14