Python try块不捕获os.system异常

2024-05-03 02:38:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个python代码:

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

代码打印:

wrongcommand: command not found

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


Tags: 代码importosnotsystemcommandworkprint
3条回答

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

  • 返回值==0->;一切正常
  • 返回值!=0->;某些错误

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

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

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

如果要在命令不存在时引发异常,应使用subprocess

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

想想看,你可能应该使用subprocess而不是os.system无论如何。。。

代码片段中有两个问题。首先,不要只做try: ... except:,总是要明确你要处理的异常。否则,您的程序将简单地接受任何类型的错误,也就是您不期望的错误。在大多数情况下,这将导致在运行时的其他时间点出现意外行为。

此外,os.system()调用在大多数情况下应该被来自subprocess模块的对应调用替换。

要查看出了什么问题,请忽略try/except块,并实际查看traceback/exception。正如其他人指出的,您将注意到在您的情况下没有例外,这就是为什么您的自定义字符串没有打印出来。

底线:考虑代码块中可能出现哪些特定异常。仔细考虑一下,你希望哪种情况会因为某些原因而发生,并妥善处理。不要处理那些你不期望的事情。

相关问题 更多 >