尝试:/ except:传递不继续到脚本的其余部分?

Jas*_*ers 0 python try-catch except

这是我脚本的一部分:

try:    
    read2length = len(reads[1])
    x2 = data[read1length:read1length+read2length,0]
    y2 = data[read1length:read1length+read2length,1]
    fig = plt.figure()
    plt.bar(x2,y2, align='center')
    fig.suptitle('Read 2 Camera Timeouts', fontsize=20)
    plt.xlabel('Cycle', fontsize=18)
    plt.ylabel('#', fontsize=16)
    if read2length < 50:
        plt.xticks(x1, fontsize=14)
    fig.savefig(join((path),'Read 2 Camera Timeouts.jpg'))
except: pass 
try:
    read3length = len(reads[2])
    x3 = data[read1length+read2length:read1length+read2length+read3length,0]
    y3 = data[read1length+read2length:read1length+read2length+read3length,1]
    fig = plt.figure()    
    plt.bar(x3,y3, align='center')
    fig.suptitle('Read 3 Camera Timeouts', fontsize=20)
    plt.xlabel('Cycle', fontsize=18)
    plt.ylabel('#', fontsize=16)
    if read3length < 50:
        plt.xticks(x1, fontsize=14)
    fig.savefig(join((path),'Read 3 Camera Timeouts.jpg'))
except: pass          
Run Code Online (Sandbox Code Playgroud)

我希望脚本尝试第一个和第二个.他们是否工作我希望脚本继续.

我一直得到read2length没有定义?

这是怎么回事?

Mar*_*ers 5

如果表达式len(reads[1])抛出异常(例如IndexError),则read2length永远不会将名称赋值给.

如果您的下一个try块尝试使用该名称,则会导致异常.

你真的不应该使用口袋妖怪异常处理(你真的不想抓住它们).使您的异常处理尽可能接近抛出异常的代码,并仅处理特定的异常.

例如,如果要处理reads[1]抛出索引错误,则只处理该异常:

try:
    read2length = len(reads[1])
except IndexError:
    # not enough elements here; assume 0
    read2length = 0
else:
    x2 = data[read1length:read1length+read2length,0]
    y2 = data[read1length:read1length+read2length,1]
    fig = plt.figure()
    plt.bar(x2,y2, align='center')
    fig.suptitle('Read 2 Camera Timeouts', fontsize=20)
    plt.xlabel('Cycle', fontsize=18)
    plt.ylabel('#', fontsize=16)
    if read2length < 50:
        plt.xticks(x1, fontsize=14)
    fig.savefig(join((path),'Read 2 Camera Timeouts.jpg'))
Run Code Online (Sandbox Code Playgroud)

现在read2length总是绑定一个整数.