Cin*_*der 18 python os.system try-catch except
我有这个python代码:
import os
try:
os.system('wrongcommand')
except:
print("command does not work")
Run Code Online (Sandbox Code Playgroud)
代码打印:
wrongcommand: command not found
Run Code Online (Sandbox Code Playgroud)
而不是command does not work.有谁知道为什么它不打印我的错误信息?
mgi*_*son 31
如果要在命令不存在时抛出异常,则应使用subprocess:
import subprocess
try:
subprocess.call(['wrongcommand'])
except OSError:
print ('wrongcommand does not exist')
Run Code Online (Sandbox Code Playgroud)
想想看,你应该用subprocess而不是os.system反正...
小智 15
因为os.system()通过方法的退出代码指示失败
被调用命令的退出代码直接传递回Python.
有文档告诉你os.system()会在出现故障时引发一个exeption.os.system()只调用操作系统的underlaying system()调用并返回其返回值.
请阅读使用os.system()文档小心.
Sho*_*lle 11
尽管子流程可能是您最好的朋友。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")
Run Code Online (Sandbox Code Playgroud)
您的代码片段中有两个问题。首先,永远不要只做try: ... except:,始终要具体说明您要处理的异常。否则,您的程序只会吞下任何类型的错误,包括您不期望的错误。在大多数情况下,这将导致在运行时的其他时间点出现意外行为。
此外,在os.system()大多数情况下,调用应该被subprocess模块中的对应调用替换。
要查看出了什么问题,请忽略 try/except 块并实际查看回溯/异常。正如其他人指出的那样,您会注意到您的情况没有例外,这就是为什么不打印自定义字符串的原因。
底线:考虑在您的代码块中可能发生哪些特定异常。仔细考虑一下,由于某些原因,您预计会发生哪些情况,并适当地处理这些情况。不要处理您不期望的那些。
| 归档时间: |
|
| 查看次数: |
31336 次 |
| 最近记录: |