Если действительно есть только одно совпадение, не используйте понимание списка.Вместо этого используйте обычный цикл for и break, когда найдете совпадение: тогда вы гарантированно, что будет только одно совпадение:
# I want to find COM port by using specific hwid
regex_vplogVID = re.compile(r'{\S+}_VID')
port_device = None
for port in listport.comports():
if re.findall(regex_vplogVID, port.hwid):
port_device = port.device
break
Бонус: если вы хотите пойти дальше,Вы можете использовать идиому for-else, если нет совпадения, но это не так часто используемая и часто смущает людей:
# I want to find COM port by using specific hwid
regex_vplogVID = re.compile(r'{\S+}_VID')
for port in listport.comports():
if re.findall(regex_vplogVID, port.hwid):
port_device = port.device
break
else: # no break encountered
raise ValueError("COM port not found")
# No need now to have a default of `None` and check for it
vplogserial = ser.Serial(port_device[0])