für meine Kodierung Aufgabe Ich soll eine Datei erstellen, die eine CSV-Datei lesen wird, bieten verschiedene Attribute zu tun Analyse (bestimmt durch die Spalte Werte. Ich hatte diesen Code perfekt funktioniert, aber nach I ich habe meine erste try/außer Block begonnen, die folgende Störung zu erhalten:.Try/Except Block verursacht ValueError
Traceback (most recent call last): File "/Users/annerussell/Dropbox/Infotec 1040/module 8/csval.py", line 49, in row1=next(reader, 'end')[0:] ValueError: I/O operation on closed file.
Here ist ein Link zu einer Datei, die Sie testen können, wenn gewünscht Wie Sie wahrscheinlich erraten dies eine Klassenzuordnung ist, und ich arbeite auf dem Lernen von Python für gradschool sowieso, also irgendwelche Vorschläge werden sehr geschätzt
import csv
print('Welcome to CSV Analytics!')
# Get file name and open the file
while True:
try:
file_name = input('Enter the name of the file you would like to process: ')
with open(file_name, "rt") as infile:
# Select the attribute to be analyzed
reader=csv.reader(infile)
headers=next(reader)[0:]
max=len(headers)
except FileNotFoundError:
print('The file you entered could not be found. Please' \
+ ' enter a valid file name, ending in .csv.')
continue
except IOError:
print('The file you selected could not be opened. Please ' \
+ 'enter a valid file name, ending in .csv.')
continue
except:
print('There was an error opening or reading your file. Please ' \
+ 'enter a valid file name, ending in .csv.')
continue
else:
print ('The attributes available to analyse are:')
for col in range(1, max):
print(col, headers[col])
while True:
try:
choice=int(input('Please select the number of the attribute you would like to analyze '))
except:
print('Please enter the numeric value for the selection you choose.')
continue
else:
# Build a dictionary with the requested data
dict1= {}
numrows=-1
row1=[]
largest_value=0
key_of_largest_value=0
while row1 != 'end':
row1=next(reader, 'end')[0:]
if row1 !='end':
numrows += 1
key=row1[0]
value=float(row1[choice])
dict1[key] = value
if value>largest_value:
largest_value=value
key_of_largest_value=key
# print('dictionary entry (key, value)', key, value)
print('Largest ', headers[choice], ' value is ', key_of_largest_value, ' with ', largest_value)
Das funktionierte perfekt meine Fehler zu lösen; Es führte jedoch zu einem anderen Problem. Jetzt, mit meiner zweiten try/expect-Klausel, wird die Schleife nach der Ausführung des Codes fortgesetzt und der Benutzer aufgefordert, ein Attribut auszuwählen. Ich habe versucht, Pause nach meiner else Aussage hinzuzufügen, und das hat nicht geholfen. –
es Schleife halten, weil Sie 'while True verwenden:' ändern Sie es in Variable, so können wir es wahr oder falsch wie 'während isProcessing wechseln:' siehe aktualisierte Antwort – ewwink