退出后如何访问“while True: try/break”循环内生成的局部变量?

我编写了一个模块,它获取目录中的所有 TIFF 图像,对每个图像文件中的所有帧进行平均,并将平均图像保存到由以下指定的自动生成的子目录中outputPath:


def average_tiff_frames(inputPath):

    '''

    This function opens all TIFF image files in a directory, averages over all frames within each TIFF file,

    and saves the averaged images to a subdirectory.

    

    Parameters

    ----------

    inputPath : string

        Absolute path to the raw TIFF files

    '''

    import datetime

    import os

    

    import numpy as np


    from PIL import Image

    

    

    # Read image file names, create output folder

    while True:

        try:

            inputPath = os.path.join(inputPath, '')    # Add trailing slash or backslash to the input path if missing

            filenames = [filename for filename in os.listdir(inputPath)

                            if filename.endswith(('.tif', '.TIF', '.tiff', '.TIFF'))

                            and not filename.endswith(('_avg.tif'))]

            outputPath = os.path.join(inputPath, datetime.datetime.now().strftime('%Y%m%dT%H%M%S'), '')

            os.mkdir(outputPath)

            break

        except FileNotFoundError:

            print('TIFF file not found - or - frames in TIFF file already averaged (file name ends with "_avg.tif")')


    # Open image files, average over all frames, save averaged image files

    for filename in filenames:

        img = Image.open(inputPath + filename)


        width, height = img.size

        NFrames = img.n_frames


        imgArray = np.zeros((height, width))    # Ordering of axes: img.size returns (width, height), np.zeros takes (rows, columns)

        for i in range(NFrames):

            img.seek(i)

            imgArray += np.array(img)

            i += 1

        imgArrayAverage = imgArray / NFrames


        imgAverage = Image.fromarray(imgArrayAverage)

        imgAverage.save(outputPath + filename.rsplit('.')[0] + '_avg' + '.tif')


        img.close()


    return outputPath

这里有什么问题吗?


我的第一个想法是,它outputPath是循环本地的while True: try,并且在 后被破坏break,所以我outputPath = ''在循环之前实例化了一个空字符串,但这没有帮助。


慕无忌1623718
浏览 86回答 1
1回答

一只名叫tom的猫

您并不是试图在循环之外访问变量,而是试图完全在方法之外访问它。该方法返回您要查找的值,因此将该值设置为变量:outputPath = average_tiff_frames(inputPath)print(outputPath)或者直接打印:print(average_tiff_frames(inputPath))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python