Python 属性错误:';非类型';对象没有属性';阅读';?
我目前正在解决一些问题,我已经在这个问题上坚持了很长一段时间。我想不出怎样才能通过属性错误 在导致问题的函数中,我有另一个名为safeOpen的函数,它打开文件,但如果没有具有该特定名称的文件,则不会给出错误Python 属性错误:';非类型';对象没有属性';阅读';?,python,Python,我目前正在解决一些问题,我已经在这个问题上坚持了很长一段时间。我想不出怎样才能通过属性错误 在导致问题的函数中,我有另一个名为safeOpen的函数,它打开文件,但如果没有具有该特定名称的文件,则不会给出错误 def safeOpen(fileName): try: infile = open(fileName) print('Opened') except: print('None') 在我的主要函数avgSpd中,我让用户输入文件名,然后用safeOpen打开它。但
def safeOpen(fileName):
try:
infile = open(fileName)
print('Opened')
except:
print('None')
在我的主要函数avgSpd中,我让用户输入文件名,然后用safeOpen打开它。但是,当程序读取该文件时,会出现以下错误:
AttributeError:'NoneType'对象没有属性'read'
。
我已经测试了safeOpen,看看这是否是问题所在,但仅测试safeOpen就表明safeOpen正在工作。任何帮助都将不胜感激
def avgSpd():
fileName = input('Enter the file name: ')
infile = safeOpen(fileName)
content = infile.read()
您的
safeOpen
没有返回语句,因此avgSpd
函数中的infle
变量被设置为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()
您没有在内部函数中返回
infle
变量。更正版本为:
def safeOpen(文件名):
尝试:
infle=open(文件名)
打印('打开')
除:
打印('无')
返回填充
def avgSpd():
fileName=input('输入文件名:')
infile=safeOpen(文件名)
content=infle.read()
返回内容
infle=safeOpen(fileName)
将函数调用返回的值赋给infle
,对吗?现在的问题是:safeOpen(fileName)
返回什么?safeOpen
不返回infle
(或任何东西),因此当您执行infle=safeOpen()
时,您将infle
的值替换为None
。另外:不要捕获所有错误,只捕获您期望发生的错误。您可以使用异常除外作为e:print(e)
来记录意外错误
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()