以下代码向我抛出异常并停止,即使预测到异常。代码通过 .sh 启动,它还会打印有关代码执行的日志信息。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Imports
import socket
from threading import Thread
import struct
import RPi.GPIO as GPIO
import os
import sys
from time import sleep
# Main Loop
while True:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.settimeout(5)
while True:
try:
# Data Sent
MESSAGE = str(""+ gpws_test() +""+ gpws_inhi() +"\r\n")
s.send(MESSAGE.encode(encoding='utf_8'))
data = s.recv(BUFFER_SIZE)
# If Recieved Data
if data == b'': break
# Translate Byte
data = data.decode('utf-8')
data = data.split(',')
# Board Functions
gpws_inhi()
gpws_test()
start_switch(data)
power()
# print ("received data:", data)
sleep(0.3)
except ConnectionAbortedError: break
except (socket.timeout, ConnectionRefusedError, ConnectionResetError, OSError) as e:
print ("No Connection - ", e)
sleep(1)
s.close()
else:
GPIO.output(23, GPIO.LOW)
GPIO.output(21, GPIO.HIGH)
Run Code Online (Sandbox Code Playgroud)
代码最初运行良好,但一段时间后,它崩溃并抛出以下错误:
except (socket.timeout, ConnectionRefusedError, ConnectionResetError, OSError) as e:
NameError: name 'ConnectionRefusedError' is not defined
Run Code Online (Sandbox Code Playgroud)
更新
通过 .sh 文件声明 python 脚本时,请记住指定 python 版本:
#!/bin/bash
python3 /home/user/Desktop/main.py &> /home/user/Desktop/startup.log
Run Code Online (Sandbox Code Playgroud)
就像在文件的开头一样:
#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)
ConnectionRefusedError是 Python 3 中的内置异常。Python 2 中没有相应的内置异常。这就是您收到not defined错误的原因:名称未定义。