Python:if语句的问题

Python:if语句的问题,python,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_somet

我对下面的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()
do_blast(x):
test_empty=open('/home/rv/ncbi-blast-2.2.23+/db/job_ID/%s.blast%%(z),'r')
如果测试为空。读取()='':
test_empty.close()
返回“失败\无结果”
其他:
做点什么
def返回\u blast(作业ID):
如果作业\u ID==“失败\u无\u结果”:
返回“抱歉没有结果:(boooo

” 其他: 返回open('/home/rv/ncbi-blast-2.2.23+/db/job\u ID/job\u ID\u%s.fasta'(job\u ID),'r')。read()
出于某种原因,代码试图将“job\u ID”分配给fasta文件以返回\u blast,即使它应该返回“对不起,没有结果”。我也理解文件名和扩展名不同,我有这样做的原因


当test_empty文件不为空时,代码可以完美地工作。

我不确定这是否是问题所在,但您的代码没有正确缩进(这在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()
do_blast(x):
test_empty=open('/home/rv/ncbi-blast-2.2.23+/db/job_ID/%s.blast%%(z),'r')
如果测试为空。读取()='':
test_empty.close()
返回“失败\无结果”
其他:
做点什么
def返回\u blast(作业ID):
如果作业\u ID==“失败\u无\u结果”:
返回“抱歉没有结果:(boooo

” 其他: 返回open('/home/rv/ncbi-blast-2.2.23+/db/job\u ID/job\u ID\u%s.fasta'(job\u ID),'r')。read()

我认为您的代码甚至不会运行..

也许一些简单的printf风格调试会有所帮助:

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

然后你至少可以看到你的函数收到了什么“job_ID”。这对于试图弄清楚为什么你的
如果
语句失败是至关重要的。

这两个函数到底是如何连接的?@Tim,我更改了缩进,因为它有误导性(缩进是python中的一切)@Tim,你发布的代码中的缩进都是错误的,因此不可能理解你的问题。请检查并编辑你的Q(提示:不要使用制表符——每级缩进只有四个空格)。不确定@Brendan在缩进编辑中是否正确理解了你的想法,因为你的问题可能很容易与错误的缩进联系在一起(正如@Greg正确地问的那样,这取决于两个看似孤立的函数实际上是如何“连接”的。)我甚至没有注意到第二个函数中的缩进。我也会修复它,但这可能是您错误的原因。我还原了我以前的编辑,以防万一。do_blast返回一个整数(作业ID)如果文件不是空的,则通过form.getfirst从URL检索并传递到return\u blast。如果我的文件不是空的,则代码会正确缩进。当文件不是空的时候它会运行,但当文件是空的时候它却无法捕获。@Tim,请在问题中解决它,以便我们知道代码的实际外观。