2010-07-17 102 views
0

我有問題,以下if語句代碼:的Python:問題與if語句

do_blast(x): 
    test_empty = open('/home/rv/ncbi-blast-2.2.23+/db/job_ID/%s.blast' % (z), 'r') 
     if test_empty.read() == '': 
      test_empty.close() 
      return 'FAIL_NO_RESULTS' 
     else: 
      do_something 

def return_blast(job_ID): 
    if job_ID == 'FAIL_NO_RESULTS': 
     return '<p>Sorry no results :(boooo</p>' 
    else: 
     return open('/home/rv/ncbi-blast-2.2.23+/db/job_ID/job_ID_%s.fasta' % (job_ID), 'r').read() 

出於某種原因代碼試圖分配「JOB_ID」在fasta文件中return_blast即使它應該已返回「抱歉沒有結果「。我也明白文件名和擴展名是不同的,我有我的理由這樣做。

當test_empty文件不爲空時,代碼完美工作。

+1

這兩個函數究竟是如何連接的? – 2010-07-17 03:31:31

+0

@Tim,我改變了縮進,因爲它是誤導性的(縮進是python中的一切) – 2010-07-17 03:32:17

+1

@Tim,你發佈的代碼中的縮進全部都是錯誤的,所以不可能理解你的問題。請檢查它並編輯你的Q(提示:不要使用製表符 - 僅在每個級別有四個空格縮進)。不確定@Brendan在他的縮進編輯中正確地閱讀了你的想法,因爲你的問題可能很容易被連接到錯誤的縮進上(這取決於@Greg正確地詢問兩個看起來孤立的功能是如何「連接」的)。 – 2010-07-17 03:32:28

回答

1

我不確定這是否是問題,但是您的代碼沒有正確縮進(並且在Python中很重要)。我相信這是你在想什麼:

do_blast(x): 
    test_empty = open('/home/rv/ncbi-blast-2.2.23+/db/job_ID/%s.blast' % (z), 'r') 
    if test_empty.read() == '': 
     test_empty.close() 
     return 'FAIL_NO_RESULTS' 
    else: 
     do_something 

def return_blast(job_ID): 
    if job_ID == 'FAIL_NO_RESULTS': 
     return '<p>Sorry no results :(boooo</p>' 
    else: 
     return open('/home/rv/ncbi-blast-2.2.23+/db/job_ID/job_ID_%s.fasta' % (job_ID), 'r').read() 

我不認爲你的代碼會即使運行..

+0

如果我的文件代碼正確縮進。它在文件不是空的時候運行,但當文件時沒有捕獲。 – Tim 2010-07-17 03:40:47

+0

@Tim,請在問題中修復它,以便我們知道代碼的實際外觀。 – 2010-07-17 03:42:03

0

也許一些簡單的printf型調試將幫助:

def return_blast(job_ID): 
    print 'job_ID: ', job_ID 
    # ... 

然後你至少可以看到你的函數收到了什麼「job_ID」。這對於試圖找出爲什麼您的if聲明失敗至關重要。