Python try块不捕获os.system异常

Python try块不捕获os.system异常,python,try-catch,os.system,except,Python,Try Catch,Os.system,Except,我有以下python代码: import os try: os.system('wrongcommand') except: print("command does not work") 代码打印: wrongcommand: command not found 而不是命令不起作用。有人知道它为什么不打印我的错误消息吗?错误命令:找不到命令是shell操作系统的输出。系统使用调用该命令操作系统。系统未引发异常 编辑:通过复制和粘贴mgilson评论的一部分进行编辑您的代码片段中有两个

我有以下python代码:

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

wrongcommand: command not found

而不是
命令不起作用
。有人知道它为什么不打印我的错误消息吗?

错误命令:找不到命令
是shell
操作系统的输出。系统使用
调用该命令<代码>操作系统。系统未引发异常


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

您的代码片段中有两个问题。首先,不要只做
try:。。。除此之外:
,请始终指定要处理的异常。否则,您的程序将简单地接受任何类型的错误,也包括您不期望的错误。在大多数情况下,这将导致在运行时的其他某个点出现意外行为

此外,
os.system()

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

一句话:考虑代码块中可能出现哪些特定异常。仔细想想,由于某些原因,你预计会发生哪些情况,并妥善处理这些情况。不要处理那些您不期望的操作。

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

  • 返回值==0->一切正常
  • 返回值!=0->某些错误
被调用命令的退出代码直接传递回Python

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


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

如果您希望在命令不存在时引发异常,则应使用
子流程

import subprocess
try:
    subprocess.run(['wrongcommand'], check = True)
except subprocess.CalledProcessError:
    print ('wrongcommand does not exist')

想想看,您可能应该使用
子流程
而不是
os.system
无论如何……

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

因此,代码如下所示

导入操作系统
尝试:
os_cmd='errocommand'
如果操作系统(操作系统指令)!=0:
引发异常(“错误命令不存在”)
除:
打印(“命令不起作用”)

还有一个最简单的方法:

import os

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

dat()

谢谢,但是如何用python捕捉它呢?甚至可能吗?是的,但不使用
os.system()
。这就是您应该使用
子流程
模块的原因之一,如@mgilson的回答中所述。更具体地说,
ErrorCommand:command not found
os.system
用于调用命令的shell的输出。(具有不同路径的不同shell可能会找到该命令)。我的命令用于运行.jar文件。当我使用方括号运行正确的命令时,上面的代码段仍然显示异常。当我在没有大括号的情况下运行错误的命令时,上面的代码段没有显示异常。如何处理?您的命令是什么样子的?我怀疑您需要类似的东西:
subprocess.call([“java”、“-jar”、“yourjar.jar]”)
sikuli\u jar=“C:\\sikulix.jar”sikuli\u script=“C:\\sikuli.sikuli”try:command=“java-jar{}-r{}”。format(sikuli\u-jar,sikuli\u script)subprocess.call([command]),除了OSError:raise(“{}\”)”其中一个缺少“{}\”.format(sikuli_jar,sikuli_script))
在上面我遇到了问题。但是下面的代码解决了这个问题
try:command=“java-jar{}-r{}”.format(sikuli\u-jar,sikuli\u脚本)子进程。check\u调用(command)除了(OSError,subprocess.SubprocessError,subprocess.CalledProcessError):raise(“{}\”,“{}\”其中一个缺少。“.format(sikuli\u-jar,sikuli\u脚本))
@shivakrishnachipa,你能把你的答案作为一个
编辑:
添加到你的问题中吗!这比评论中的内容更容易阅读!