2024-05-23 14:45:09 发布
网友
我有这个python代码:
import os try: os.system('wrongcommand') except: print("command does not work")
代码打印:
wrongcommand: command not found
而不是command does not work。有人知道为什么不打印我的错误信息吗?
command does not work
因为os.system()表示方法的退出代码失败
被调用命令的退出代码直接传递回Python。
有文档告诉您,os.system()将在出现故障时引发一个exption。system()只调用操作系统的underlayingsystem()调用并返回其返回值。
请仔细阅读os.system()文档。
如果要在命令不存在时引发异常,应使用subprocess:
subprocess
import subprocess try: subprocess.call(['wrongcommand']) except OSError: print ('wrongcommand does not exist')
想想看,你可能应该使用subprocess而不是os.system无论如何。。。
os.system
代码片段中有两个问题。首先,不要只做try: ... except:,总是要明确你要处理的异常。否则,您的程序将简单地接受任何类型的错误,也就是您不期望的错误。在大多数情况下,这将导致在运行时的其他时间点出现意外行为。
try: ... except:
此外,os.system()调用在大多数情况下应该被来自subprocess模块的对应调用替换。
os.system()
要查看出了什么问题,请忽略try/except块,并实际查看traceback/exception。正如其他人指出的,您将注意到在您的情况下没有例外,这就是为什么您的自定义字符串没有打印出来。
底线:考虑代码块中可能出现哪些特定异常。仔细考虑一下,你希望哪种情况会因为某些原因而发生,并妥善处理。不要处理那些你不期望的事情。
因为os.system()表示方法的退出代码失败
被调用命令的退出代码直接传递回Python。
有文档告诉您,os.system()将在出现故障时引发一个exption。system()只调用操作系统的underlayingsystem()调用并返回其返回值。
请仔细阅读os.system()文档。
如果要在命令不存在时引发异常,应使用
subprocess
:想想看,你可能应该使用
subprocess
而不是os.system
无论如何。。。代码片段中有两个问题。首先,不要只做
try: ... except:
,总是要明确你要处理的异常。否则,您的程序将简单地接受任何类型的错误,也就是您不期望的错误。在大多数情况下,这将导致在运行时的其他时间点出现意外行为。此外,
os.system()
调用在大多数情况下应该被来自subprocess
模块的对应调用替换。要查看出了什么问题,请忽略try/except块,并实际查看traceback/exception。正如其他人指出的,您将注意到在您的情况下没有例外,这就是为什么您的自定义字符串没有打印出来。
底线:考虑代码块中可能出现哪些特定异常。仔细考虑一下,你希望哪种情况会因为某些原因而发生,并妥善处理。不要处理那些你不期望的事情。
相关问题 更多 >
编程相关推荐