實際上有兩個部分對我的問題。我已經寫了一個函數來通過簡單的替換從字符串中刪除ANSI代碼,但是函數按原樣返回字符串。我已經嘗試過使用pdb進行調試,但結果並不合理,因爲看起來好像Python本身存在一個小故障。然而,我懷疑這一點,所以我想弄清楚在代碼中沒有看到什麼錯誤。此外,我想知道是否有更好的方法來刪除(可能還沒有看到)的ANSI代碼,而無需每次修改該函數。調試Python函數以刪除ANSI代碼
這裏有我不解的PDB屏幕的鏡頭: pdb screenshot of function debugging
n_text不被設置,目標設置爲一些奇怪和執行行指針不知何故被設置爲一個非 - 可執行行(157)。 我一直有類似的錯誤,當我用而不是string.replace。
功能是
def clean_ansi(text, remove=''):
# remove ANSI control codes
n_text = text
targets = [''.join([chr(cde) for cde in [27, 91, 67]]),
''.join([chr(cde) for cde in [27, 91, 48, 109]]),
''.join([chr(cde) for cde in [27, 91, 49, 109]])]
for target in targets:
n_text = n_text.replace(target, '')
return n_text
在這個例子中的字符串,我試圖清理是
「 - ? 人(蘇格拉底)\ n \ X1B [C \ X1B [ ç\ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ X1B [C \ 。X1B [C \ X1B [C \ X1B [C \ X1B [C. \ n \ X1B [1mtrue \ X1B [0米\ n \ n - ?'
和預期收益
'? - 人類(蘇格拉底)\ n \ ntrue \ n \ n - ?'
把事情而言,這是一個項目to create a command-line IDE的一部分,出現此特定問題當一個查詢被傳遞給一個SWI-Prolog實例(通過pexpect),並且輸出被解析爲只給出實際結果,即爲真。在這種情況下爲。
謝謝許多。順便說一下,事實證明,我們的兩個實現都可以正常工作,不過你的性能肯定更高,更優雅。我注意到我添加代碼時遇到了同樣的問題。但之後我退出並重新啓動了我的應用程序(在我剛剛從模塊重新加載函數之前),並且它完全正常工作。也許當Python重新加載一個函數時,它只會寫入相同的內存地址,並且可能會發生一些破壞。 – skeledrew