AttributeError:“非类型”对象没有属性“读取”?

2024-09-27 00:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在解决一些问题,我已经在这个问题上坚持了很长一段时间。我想不出怎样才能通过属性错误

在导致问题的函数中,我有另一个名为safeOpen的函数,它打开文件,但如果没有具有该特定名称的文件,则不会给出错误

def safeOpen(fileName):
try:
    infile = open(fileName)
    print('Opened')
except:
    print('None')

在我的主要函数avgSpd中,我让用户输入文件名,然后用safeOpen打开它。但是,当程序读取该文件时,会出现以下错误:

AttributeError: 'NoneType' object has no attribute 'read'。 我已经测试了safeOpen,看看这是否是问题所在,但仅测试safeOpen就表明safeOpen正在工作。任何帮助都将不胜感激

def avgSpd():
    fileName = input('Enter the file name: ')
    infile = safeOpen(fileName)
    content = infile.read()

Tags: 文件函数名称read属性def错误open
2条回答

您没有在内部函数中返回infile变量。更正版本为:

def safeOpen(fileName):
    try:
        infile = open(fileName)
        print('Opened')
    except:
        print('None')
    return infile


def avgSpd():
    fileName = input('Enter the file name: ')
    infile = safeOpen(fileName)
    content = infile.read()
    return content

您的safeOpen没有return语句,因此avgSpd函数中的infile变量被设置为None

尝试:

def safeOpen(fileName):
    try:
        infile = open(fileName)
        print('Opened')
        return infile
    except:
        print('None')
        return None

值得注意的是,最好使用上下文管理器(即“with”语句)确保文件被安全打开。如果文件存在,也可以使用os.path.exists()函数检查,而不是使用try/except

比如:

import os

def safeOpen(fileName):
     if os.path.exists(fileName):
         with open(fileName) as f:
              content = f.read()
     else:
         content = None
     
     return content

def avgSpd():
    fileName = input('Enter the file name: ')
    content = safeOpen(fileName)
    if content is not None:
        do_more_stuff()

相关问题 更多 >

    热门问题