我是 Python 的初学者。我有一个使用 pyserial 库与串行设备通信的程序。程序向机器发送一个字节的数字并接收字节数作为回复。
我的代码是
import serial, string
port = serial.Serial("COM9", 38400, timeout=10.0)
serial.PARITY_NONE
serial.EIGHTBITS
serial.STOPBITS_ONE
port.write(bytes([53, 1, 4, 0, 83]))
print("Write done")
data = port.read(20)
data1= data.decode('utf-8')
print(data1)
Run Code Online (Sandbox Code Playgroud)
输出是
Write done
Traceback (most recent call last):
File "C:\Python34\serialcomm.py", line 18, in <module>
data1= data.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x84 in position 8:
invalid start byte
Run Code Online (Sandbox Code Playgroud)
输出应该是 [53,1,4,0,83,53,1,63,83]
如果我排除解码,我得到
Write done
b'5\x01\x04\x00S5\x1b\x00\x84S'
Run Code Online (Sandbox Code Playgroud) 我创建了一些用于异常处理的子类。该方法抛出子类异常。我为超类和子类创建了@ExceptionHandler。但只有当没有对异常的超类进行处理(handleSuperException(SuperclassExceptionException e))时,才会处理子类异常。SubClassAException、SubClassBException、SubClassCException 扩展了 SuperclassException 异常。
public class Controller @PostMapping("/path/") {
public ResponseEntity<String> method() throws SuperclassException{
}
@ExceptionHandler(SuperclassException.class)
public ResponseEntity handleSuperException(SuperclassExceptionexception e) {
//hadle superclass related
}
@ExceptionHandler({SubClassAException.class, SubClassBException.class, SubClassCException.class})
public ResponseEntity handleSubClassException(SuperclassExceptionexception e) {
//handle more specific
}
Run Code Online (Sandbox Code Playgroud)
但即使抛出子类异常,它也永远不会去handleSubClassException。
我想抛出异常并显示它.在我的IF块中,我抛出异常.我是否必须存储异常以将其作为变量传递到前面的方法中.
if(count !=0) {
throw new Exception();
eventLogger.logError("The count is not zero",e)
}
else{
// do something else
}
Run Code Online (Sandbox Code Playgroud)
记录器具有Throwable错误作为参数.
logError(String description, Throwable error);
Run Code Online (Sandbox Code Playgroud)
如何将抛出的异常传递给此方法
class Temp() {
public boolean methodA(String param) {
try {
if(methodB(param))
return true;
return false;
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试类
@Test
public void testMethodA() {
Temp temp = new Temp();
Temp spyTemp = Mockito.spy(temp);
Mockito.doReturn(true).when(spyTemp).methodB(Mockito.any());
boolean status = temp.methodA("XYZ");
Assert.assertEquals(true, status);
}
Run Code Online (Sandbox Code Playgroud)
当调用真实类 temp 到 methodA 时,应该返回模拟的方法 B 值。因此返回true。为什么这是不正确的。我遇到了同样的问题。我想在真正的班级上运行测试,而不是按照答案的建议运行模拟对象。我想运行类 methodA 并在调用时期望模拟对象 spyTemp methodB 值
java ×3
exception ×2
decode ×1
if-statement ×1
junit ×1
mockito ×1
pyserial ×1
python ×1
serial-port ×1
spring-boot ×1