Câu hỏi gốcPython: là nó ok trả lại cả boolean và chuỗi?
Tôi đã thực hiện một chức năng đang chờ một chuỗi cụ thể xuất hiện trên cổng nối tiếp và trả về tất cả ký tự đọc cho đến khi chuỗi được tìm thấy hoặc false nếu không. Điều này là khá thuận tiện, nhưng tôi đã tự hỏi nếu nó được coi là thực hành xấu hay không?
Làm rõ:
Mục đích chính là để chờ một đặc biệt chuỗi xuất hiện trong một khoảng thời gian nhất định. Ngoại trừ lỗi IO, kết quả có thể là True (chuỗi đã xuất hiện) hoặc False Mục tiêu thứ hai là lấy toàn bộ đầu ra, vì có thể có thông tin mà tôi muốn phân tích trước câu trả lời thực tế được tìm kiếm. Tôi nghĩ có thể tôi có thể kết hợp mục tiêu chính và phụ trong một giá trị trả lại.
def MyFunc(s, timeout) :
test = get_some_input(timeout)
if test.endswith(s)
return test
else
return False
Chỉnh sửa: Một câu trả lời được đề xuất khác là đưa ra ngoại lệ. Tôi không nghĩ rằng đó là một ý tưởng tốt, bởi vì thời gian chờ là một hành vi mong đợi. Tôi có nghĩa là, nếu có một tham số để xác định một thời gian chờ, sau đó một thời gian chờ là một kết quả có thể, và không phải là một ngoại lệ.
Chỉnh sửa 2: Vì tôi cần lưu trữ đầu vào, có thể sử dụng một lớp là giải pháp phù hợp. Việc đợi hàm có giá trị trả về rõ ràng, nhưng toàn bộ chuỗi đã được đọc cho đến khi hết thời gian chờ.
class Parser :
def __init__(self, sport_name):
self.currentMsg = ''
self.ser = serial.Serial(sport_name, 115200)
def WaitFor(self, s, timeOut=None):
self.ser.timeout = timeOut
self.currentMsg = ''
while self.currentMsg.endswith(s) != True :
# should add a try catch here
c=self.ser.read()
if c != '' :
self.currentMsg += c
else :
print 'timeout waiting for ' + s
return False
return True
Điều trực giao đó là hoàn toàn đúng. Vì vậy, trả về một tuple sẽ là một giải pháp tốt, tuy nhiên tôi chưa rất thoải mái với điều này, cộng với việc sử dụng một lớp cho phép tôi nhúng một cổng nối tiếp vào nó, và cho phép mở rộng thêm. – shodanex
vì vậy, giá trị sẽ là gì nếu được chấp nhận là sai? – SilentGhost
@SilentGhost: giá trị luôn là đầu vào được đọc cho đến nay (cho đến khi tìm thấy chuỗi hoặc hết thời gian chờ). – jfs