我有这个python代码:
import os
try:
os.system('wrongcommand')
except:
print("command does not work")
代码打印:
wrongcommand: command not found
而不是command does not work
。有谁知道为什么它不打印我的错误信息?
答案 0 :(得分:22)
如果您希望在命令不存在时抛出异常,则应使用subprocess
:
import subprocess
try:
subprocess.call(['wrongcommand'])
except OSError:
print ('wrongcommand does not exist')
想想看,你应该使用subprocess
而不是os.system
......
答案 1 :(得分:11)
因为os.system()通过方法的退出代码表示失败
被调用命令的退出代码直接传递给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()