Python try块不会捕获os.system异常

时间:2012-09-11 15:51:36

标签: python try-catch os.system except

我有这个python代码:

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

代码打印:

wrongcommand: command not found

而不是command does not work。有谁知道为什么它不打印我的错误信息?

6 个答案:

答案 0 :(得分:22)

如果您希望在命令不存在时抛出异常,则应使用subprocess

 import subprocess
 try:
     subprocess.call(['wrongcommand'])
 except OSError:
     print ('wrongcommand does not exist')

想想看,你应该使用subprocess而不是os.system ......

答案 1 :(得分:11)

因为os.system()通过方法的退出代码表示失败

  • 返回值= 0 - >好的一切
  • 返回值!= 0 - >一些错误

被调用命令的退出代码直接传递给Python。

有文档告诉你os.system()会在出现故障时引发一个exeption。 os.system()只调用OS的underlaying system()调用并返回其返回值。

请仔细阅读os.system()文档

答案 2 :(得分:3)

您的代码段中存在两个问题。首先,不要只做try: ... except:,始终要具体说明要处理的异常。否则,您的程序只会吞下任何类型的错误,也包括您不期望的错误。在大多数情况下,这会在运行时的某些其他点导致意外行为。

此外,os.system()调用大部分时间应由subprocess模块中的对应方替换。

要查看出现了什么问题,请省略try / except块并实际查看traceback / exception。正如其他人所指出的,你会注意到你的情况没有例外,这就是为什么不打印自定义字符串的原因。

结论:考虑代码块中可能发生的特定异常。仔细考虑一下您希望由于某些原因而发生的事情并妥善处理。不要处理你不期望的那些。

答案 3 :(得分:1)

wrongcommand: command not found是shell os.system用于调用命令的输出。 os.system没有抛出异常

编辑:通过复制并粘贴部分mgilson的评论进行编辑

答案 4 :(得分:0)

尽管子流程可能是您最好的朋友。 os.system在某些地方仍然有用,特别是对于程序员玩C / C ++模式。

因此,代码将在下面。

import os
try:
  os_cmd = 'wrongcommand'
  if os.system(os_cmd) != 0:
      raise Exception('wrongcommand does not exist')
except:
  print("command does not work")

答案 5 :(得分:0)

还有一种最简单的方法:

import os

def dat():
        if os.system('date') == 0:
            print("Command successfully executed")
        else:
            print("Command failed to execute")

dat()