我有这个python代码:
import os
try:
os.system('wrongcommand')
except:
print("command does not work")
代码打印:
wrongcommand: command not found
而不是command does not work
. 有谁知道为什么它不打印我的错误信息?
如果你想在命令不存在时抛出异常,你应该使用subprocess
:
import subprocess
try:
subprocess.run(['wrongcommand'], check = True)
except subprocess.CalledProcessError:
print ('wrongcommand does not exist')
想一想,您可能应该使用subprocess
而不是os.system
无论如何...
因为 os.system() 通过方法的退出码表示失败
被调用命令的退出代码直接传回 Python。
有文档告诉您 os.system() 在失败的情况下会引发异常。os.system() 只是调用操作系统的底层 system() 调用并返回其返回值。
请仔细阅读 os.system() 文档。
虽然 subprocess 可能是你最好的朋友。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")
您的代码段中有两个问题。首先,永远不要只是做try: ... except:
,总是要明确你想要处理的异常。否则,您的程序只会吞下任何类型的错误,包括那些您不期望的错误。在大多数情况下,这会在运行时的某个其他时间点导致意外行为。
此外,os.system()
大多数时候调用应该被subprocess
模块中的对应调用替换。
要查看出了什么问题,请忽略 try/except 块并实际查看回溯/异常。正如其他人指出的那样,您会注意到您的情况没有例外,这就是不打印自定义字符串的原因。
底线:考虑在您的代码块中可能发生哪些特定异常。仔细考虑由于某些原因您希望发生哪些情况并适当地处理这些情况。不要处理那些你不期望的。
wrongcommand: command not found
os.system
是用于调用命令 的 shell 的输出。os.system
没有抛出异常
编辑:由 mgilson 评论的复制和粘贴部分编辑
还有一种更简单的方法是:
import os
def dat():
if os.system('date') == 0:
print("Command successfully executed")
else:
print("Command failed to execute")
dat()