我正在使用以下提示在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$
我很困惑,因为我已经定义了变量&#39; fhand&#39;。专家的任何帮助?
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)
答案 0 :(得分:0)
您的问题是,如果没有例外,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'
答案 1 :(得分:0)
最可能的原因是,如果在打开文件期间发生错误,则会显示警告消息&#34;不是有效文件&#34;,但处理会继续。
在这种情况下,不会为fhand分配值,并且会有NameError
您可能需要一个循环,重复询问文件名,并且只有break
在文件成功打开时才会输出。
while True:
name = input("filename ... ")
try:
fhand = open(name)
except OSerror: # only catch OS errors, not everything.
print("not a valid file")
else:
break
答案 2 :(得分:0)
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)