Closed. This question is off-topic. It is not currently accepting answers. Learn more。想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。我正在使用python中的子进程模块使用sakis3g将我的3g加密狗连接到3g网络。请看我使用的代码:check_output(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"'])有时我的加密狗可能会弹出,并给出一个错误的性质:“这个设备没有任何GSM功能…”我完全可以接受,因为它所需要的只是一个简单的重试,它通常会工作得很好。但是,使用子进程时,我会遇到错误returned non-zero exit status,它会使我的软件完全崩溃。因为我只需要一次重试,所以我尝试在try: ... except: ...中编写代码。我试图捕捉的错误是 >,如果是非零退出状态,则应按 >返回。然而,这似乎并没有解决问题,问题仍然存在:Traceback (most recent call last): File "run.py", line 91, in <module> print connect_3G() File "run.py", line 28, in connect_3G check_call(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"']) File "/usr/lib/python2.7/subprocess.py", line 540, in check_call raise CalledProcessError(retcode, cmd)subprocess.CalledProcessError: Command '['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"']' returned non-zero exit status 95因此,我试图用最广泛的方式捕捉异常,只需使用subprocess.CalledProcessError,即使这样,错误仍然会出现并使软件崩溃。我不知道该如何正确地捕捉这个错误,是否有人能告诉我这里到底发生了什么,因为在这一点上(对我来说)捕捉子流程导致的错误似乎相当困难。请参阅此处我打算使用的完整功能:def connect_3G(): while True: check_output(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"']) try: return 'Connected to ip: {}'.format(json.loads(requests.get('http://httpbin.org/ip').content)['origin']) except subprocess.CalledProcessError: print 'Oops, problem connecting to 3G. Better retry fam.' (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我认为你做的是对的……但是把抛出异常的代码移到try块中!def connect_3G(): while True: try: check_output(['sakis3g', '--sudo', 'connect', 'OTHER="USBMODEM"', 'USBMODEM="12d1:1001"', 'APN="internet"']) return 'Connected to ip: {}'.format(json.loads(requests.get('http://httpbin.org/ip').content)['origin']) except subprocess.CalledProcessError: print 'Oops, problem connecting to 3G. Better retry fam.' (adsbygoogle = window.adsbygoogle || []).push({});
09-25 18:27