我正在编写Python 3中的一段代码,其中包含以下提示:
练习2:编写一个程序来提示输入文件名,然后通读文件并查找格式为:X-DSPAM-Confidence:0.8475的行。当您遇到以X-DSPAM-Confidence:开头的行时,将该行拆分以提取该行上的浮点数。计算这些行的数量,然后计算这些行的垃圾邮件置信度值的总和。当您到达文件末尾时,打印出垃圾邮件的平均置信度。
我已经开始编写我的代码(如下所示),但不断收到来自Python的以下错误消息:
Traceback (most recent call last):
File "spam_lines_in_file.py", line 14, in <module>
for line in fhand:
NameError: name 'fhand' is not defined
0587388179:ch_07_files juliecruz$ 我被弄糊涂了,因为我定义了变量'fhand‘。专家们有什么帮助吗?
count = 0
sum = 0
user = input('Please enter a file name')
try:
fhand = open(user)
except:
print("Not a valid file")
for line in fhand:
line = line.rstrip()
if line.startswith('X-DSPAM-Confidence:'):
print(lines)
count += 1
colon_position = int(line.find(":"))
extract = line[colon_position+1:]
number_extract = float(extract)
sum += number_extract
print("Extracted lines", count)
print("Sum of confidence values", sum)
print("Average of confidence values", sum/count)发布于 2016-10-01 22:57:35
您的问题是,只有在没有发生异常的情况下,才会为fhand赋值。
你写道:
try:
fhand = open(user)
except:
print("Not a valid file")因此,在出现异常的情况下,不会为fhand赋值。这意味着当您试图迭代它时,Python会抛出一个NameError,因为它从未定义过。
也许你想要的是在出现异常的情况下终止?例如:
import sys
try:
fhand = open(user)
except:
print("Not a valid file")
sys.exit()或者为fhand分配一个默认值
import sys
try:
fhand = open(user)
except:
print("Not a valid file")
fhand = 'Default content'发布于 2016-10-01 23:02:44
最可能的原因是,如果在打开文件的过程中发生错误,则会显示一条警告消息“不是有效的文件”,但随后处理会继续。
在这种情况下,不会为fhand赋值,而是会有一个NameError
您可能需要一个循环,该循环反复询问文件名,并且只有在文件成功打开时才会breaks。
while True:
name = input("filename ... ")
try:
fhand = open(name)
except OSerror: # only catch OS errors, not everything.
print("not a valid file")
else:
break发布于 2017-03-27 13:38:49
fhand是一个文件对象
try:
fhand = open(user)
except:
print("Not a valid file")您不能对文件对象执行以下操作。
for line in fhand:您需要执行以下操作:
for line in fhand.readlines():这对你来说还不是问题,但很快就会成为问题。
你真正的问题是:
当此代码
try:
fhand = open(user)抛出异常,则不会创建fhand变量,因此您需要在except块中退出。
try:
fhand = open(user)
except:
print("Not a valid file")
sys.exit(1)https://stackoverflow.com/questions/39760027
复制相似问题