【发布时间】:2014-06-25 14:21:23
【问题描述】:
对不起,如果这是一个简单的问题并且之前已经回答过,但我在任何地方都找不到。
我正在尝试侦听 UDP 数据包,如果它们是某些数据包,请运行不同的批处理脚本。我的工作正常,但我发现如果 Popen 命令找不到文件,它会触发异常并且脚本停止运行。理想情况下,我希望它打印一条消息,然后继续侦听其他数据包并对其采取行动,只给我们一条调试消息。这是我使用的代码,我该怎么做?
if rxdata == "Camera 1":
from subprocess import Popen
try:
p = Popen("Camera 1.bat", cwd=r"C:\xxx")
stdout, stderr = p.communicate()
except FileNotFoundError():
print('Camera 1.bat not found')
elif rxdata == "Camera 2":
from subprocess import Popen
p = Popen("Camera 2.bat", cwd=r"C:\xxx")
stdout, stderr = p.communicate()
在这两个示例中,我都收到以下内容并且脚本关闭。
Traceback (most recent call last):
File "C:\UDP Listener.py", line 42, in <module>
p = Popen("Camera 1.bat", cwd=r"C:\xxx")
File "C:\Python34\lib\subprocess.py", line 858, in __init__
restore_signals, start_new_session)
File "C:\Python34\lib\subprocess.py", line 1111, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
提前致谢
马特
【问题讨论】:
-
只需将调用放在
try/except块中即可。见here。 -
相机 1 有一个 try / except 块,但我收到相同的消息。我做错了吗?
-
except FileNotFoundError():是错误的。您不应该在这里给出异常的(新创建的)实例,而应该给出异常类本身。 -
@glglgl 这里有问题;运行类似
try: raise FileNotFoundError except FileNotFoundError()的东西会导致TypeError: catching classes that do not inherit from BaseException is not allowed。 OP 没有收到此异常可能表明try块内的调用没有被执行。 -
@user4815162342 因为回溯包含
Popen("Camera 1.bat",代码被执行。奇怪,也许他甚至在不知情的情况下使用 Python 2 来生成此回溯。
标签: python exception python-3.x popen