[英]Python try block does not catch os.system exceptions
我有这个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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.