假設我有以下串列:
a = ["hello",
"hi",
"bye"]
我四處移動元素,并且錯誤地最終得到:
a = ["hello",
"bye"
"hi"]
這是 2 個元素的串列:“hello”和“byehi”。
我怎樣才能讓 Python 檢測到這個錯誤?
目前我最終得到:
assert(len(a)==3)每當我向串列中添加元素時,這當然需要更新。
如何減少這種錯誤的可能性(當然除了小心之外)?
例如,對于不會以這種方式合并字串的串列,是否還有其他分隔符?
是否有可以檢測到的 linter 或外部工具?
uj5u.com熱心網友回復:
你真的不能缺少好的單元測驗。但是,您可以使用尾隨逗號,這意味著您可以在每個元素之后統一使用a ,,而不是僅使用 a分隔元素,。
這實際上只是一個排版約定;雖然它有助于避免此類錯誤,但它不能替代測驗。
a = [
"hello",
"hi",
"bye",
]
(對所有串列元素和方括號使用單獨的行也將使差異更易于閱讀,使您的代碼審查者感到高興。)
uj5u.com熱心網友回復:
我知道沒有替代分隔符,但有一些事情可能會有所幫助。
首先,您可以嘗試在一行中初始化串列,如果它適合合理的空間量,那么缺少分隔符可能會更明顯。
a = ["hello", "hi", "bye"]
其次,您可以嘗試將整個內容設為文字字串,然后在換行符上拆分:
a = """hello
hi
bye""".split('\n')
第三,您可以嘗試將右括號放在它自己的行上,并確保串列宣告的每一行(包括最后一個元素)的末尾都有一個逗號。這在語法上是有效的,也是我的首選方法。
a = [
"hello",
"hi",
"bye",
]
uj5u.com熱心網友回復:
我認為您的問題不是您的串列或其分隔符。我認為您的問題是對串列中元素的操作正在更改元素。為了避免這種長度更新,我建議將您的操作包裝在 try catch 中,直到您弄清楚是什么命令正在改變元素。
# assuming a is not very big
b = a.copy()
try:
for i in a:
*operation on a.list*
except:
len(a)!= len(b)
del b
您的代碼中有一個步驟,其中更新了 a = a.operation。您可以通過在 try catch 之前復制 b 來檢查您的長度。這樣您就不必對長度進行硬編碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435215.html
