2016-09-27 53 views
1

進出口運行到一個問題,即如何在python中引發警告時在函數中查看變量?

cds_to_protein = str(feature.extract(record).seq.translate(to_stop = True)) 

將拋出一個Biopython警告。所以我需要看看傳遞給它的記錄和功能是什麼導致了這個警告。

有沒有辦法使用pdb或其他調試器來查看函數中的參數?

編輯:我使用python -Werror -m pdb script.py其工作時的警告出現

停止PDB,我也是爲了救他們加入

saved_record = record 
    saved_feature = feature 

,但我不知道他們是否」必要的。我應該讓他們全球化,以查看他們?

這裏的功能:

def validate_cds(record, feature): 

    saved_record = record 
    saved_feature = feature 

    protein_in_file = str(feature.qualifiers.get('translation', 'no_translation')).strip('\'[]') 

    cds_to_protein = str(feature.extract(record).seq.translate(to_stop = True)) 

    return 
+1

當然,只需使用調試器即可進入該功能;那時你可以檢查你喜歡的任何地方(只需在調試器中使用'!record'和'!feature'來回顯它們的值)。沒有必要分配給其他當地人這樣做。 –

+0

@MartijnPieters我使用'python -Werror -m pdb'來運行pdb,直到它拋出錯誤,但我得到'*** NameError:名稱'記錄'未定義' – ahtmatrix

+1

您可以使用'try:except'和打印出你的程序無法執行的值 –

回答

0

感謝@TomaszPlaskota他建議使用try: except

添加以下把警告插入例外

import warnings 
from Bio import BiopythonWarning 

warnings.filterwarnings('error') 

和簡單try: except正確地停止其

def validate_cds(record, feature): 

    try: 

     protein_in_file = str(feature.qualifiers.get('translation', 'no_translation')).strip('\'[]') 

     cds_to_protein = str(feature.extract(record).seq.translate(to_stop = True)) 
    except: 
     print record.id 
return 
1

嘗試添加跟蹤,給你的函數:

def validate_cds(record, feature): 
    import pdb; pdb.set_trace() 
    saved_record = record 
    saved_feature = feature 

    protein_in_file = str(feature.qualifiers.get('translation', 'no_translation')).strip('\'[]') 

    cds_to_protein = str(feature.extract(record).seq.translate(to_stop = True)) 

    return 

現在,當你調用函數時,你會被彈出到pdb並可通過功能線交互步驟請檢查變量等。請記住,當您第一次看到pdb提示時,您感興趣的變量將不會被初始化,因此您可以通過開始逐步完成該功能,直到你通過你感興趣的函數中的點。

我喜歡在這樣的同一行上導入和調用函數,因爲只有一行你必須在調試後清理,並且同樣,許多語法檢查器將標記該行,因爲pep 8不鼓勵這樣的複合語句,所以它將提醒您稍後擺脫該行。

相關問題