Python 为什么我会犯错误;回溯(最近一次调用last“和”TypeError:“io.TextIOWrapper&“x27”对象不可调用”;
每当我运行代码时,都会收到以下错误消息: 有人能帮我找出错误吗?我为语言道歉,但我的编程老师更喜欢用瑞典语接收我们的脚本 该计划的要点是,它允许警察在数据库(brottby.txt)中登记(inmatning)被盗车辆。警察还可以检查是否在数据库(kontroll)中登记了车牌,注销车牌(AvRegistering),并打印所有被盗车辆的完整列表(forteckning) 当我运行打印被盗车辆完整列表的部分(由“while state_forteckning:”指定)时,会发生错误。我打印文档到控制台的每一行,但此后编写的任何脚本都会遇到类似的异常Python 为什么我会犯错误;回溯(最近一次调用last“和”TypeError:“io.TextIOWrapper&“x27”对象不可调用”;,python,Python,每当我运行代码时,都会收到以下错误消息: 有人能帮我找出错误吗?我为语言道歉,但我的编程老师更喜欢用瑞典语接收我们的脚本 该计划的要点是,它允许警察在数据库(brottby.txt)中登记(inmatning)被盗车辆。警察还可以检查是否在数据库(kontroll)中登记了车牌,注销车牌(AvRegistering),并打印所有被盗车辆的完整列表(forteckning) 当我运行打印被盗车辆完整列表的部分(由“while state_forteckning:”指定)时,会发生错误。我打印文档
# Importerar os och sys
import os
import sys
# Startlägen för while-loopar
state_pagaende = True
state_inmatning = False
state_kontroll = False
state_avregistrering = False
state_forteckning = False
state_avsluta = False
# Definierar korrekta värden för registreringsskyltar
bokstaver = "abcdefghjklmnoprstuwxyz"
tal = "0123456789"
# Skapa registerfil
try:
f = open('brottby.txt', 'x')
except:
pass
# Huvudloop (för omstart)
while state_pagaende:
# Välkomstprompt
print ("=======================================\n""POLISMYNDIGHETEN I BROTTBY: BILREGISTER\n""=======================================\n\n")
# Alternativmeny
alternativ = input("VÄLJ ETT ALTERNATIV [1-5]:\n\n""1.INMATNING\n""2.KONTROLL\n""3.AVREGISTRERING\n""4.FÖRTECKNING\n""5.AVSLUTA\n\n")
print ("\n\n")
# Bestämmer vilken alternativloop som ska startas
if (alternativ == str(1)):
state_inmatning = True
elif (alternativ == str(2)):
state_kontroll = True
elif (alternativ == str(3)):
state_avregistrering = True
elif (alternativ == str(4)):
state_forteckning = True
elif (alternativ == str(5)):
state_avsluta = True
else:
print ("OGILTIG INMATNING!\n\n")
continue
# Inmatning av ny stulen bil
while state_inmatning:
print ("*INMATNING*\n\n")
# Behandling av bokstäver i registreringsnumret
registreringsbokstaver = input("MATA IN REGISTRERINGSNUMMRETS TRE FÖRSTA TECKEN [BOKSTÄVER]:\n\n")
print ("\n")
for tkn in registreringsbokstaver:
if (tkn.lower() in bokstaver and len(registreringsbokstaver) == int(3)):
continue
else:
print ("OGILTIG INMATNING!\n\n")
state_inmatning = False
# Behandling av siffror i registreringsnumret
registreringssiffror = input("MATA IN REGISTRERINGSNUMMRETS TRE SISTA TECKEN [SIFFROR]:\n\n")
print ("\n")
for tkn in registreringssiffror:
if (tkn.lower() in tal and len(registreringssiffror) == int(3)):
continue
else:
print ("OGILTIG INMATNING!\n\n")
state_inmatning = False
# Definierar registreringsnumret
registreringsnummer = registreringsbokstaver + registreringssiffror
# Kontrollerar om registreringsnumret redan finns i registerfilen
if registreringsnummer.upper() in open('brottby.txt').read():
# Om registreringsnumret redan är registrerat
print ("REGISTRERINGSNUMMER", registreringsnummer.upper(), "FINNS REDAN I DATABASEN!\n\n")
else:
# Om registreringsnumret inte är registrerat
with open("brottby.txt", "a") as f:
f.write("\n" + registreringsnummer.upper())
print ("REGISTRERINGSNUMMER", registreringsnummer.upper(), "ÄR TILLAGD I DATABASEN!\n\n")
# Frågar användaren om hen vill avsluta programmet eller återgå till huvudmenyn
fortsatt_inmatning = input("VILL DU MATA IN ETT TILL REGISTRERINGSNUMMER? [JA/NEJ]\n\n")
print ("\n")
# Fortsätt inmatning
if (fortsatt_inmatning.upper() == "JA"):
continue
# Återgår till huvudmenyn
elif (fortsatt_inmatning.upper() == "NEJ"):
state_inmatning = False
# Ogiltig inmatning
else:
print ("OGILTIG INMATNING!\n\n")
state_inmatning = False
# Kontroll av registreringsnummer gentemot databasen
while state_kontroll:
print ("*KONTROLL*\n\n")
# Inmatning av registreringsnummer för sökning
soktregistreringsnummer = input("VILKET REGISTRERINGSNUMMER VILL DU KONTROLLERA? [UTAN MELLANSLAG]\n\n")
print ("\n")
# Kontrollerar att registreringsnumret som ska kontrolleras har rätt längd
# Om registreringsnumret har rätt längd
if (len(soktregistreringsnummer) == int(6)):
# Kontrollerar registreringsnummer gentemot databasen
if (soktregistreringsnummer.upper() in open('brottby.txt').read()):
print("FORDON", soktregistreringsnummer.upper(), "ÄR REGISTRERAD SOM STULEN I DATABASEN!\n")
else:
print("FORDON", soktregistreringsnummer.upper(), "ÄR INTE REGISTRERAD SOM STULEN I DATABASEN!\n")
# Om registreringsnumret har fel längd
else:
print ("OGILTIG INMATNING!\n")
state_kontroll = False
# Frågar användaren om hen vill avsluta programmet eller återgå till huvudmenyn
fortsatt_kontroll = input("VILL DU KONTROLLERA ETT TILL REGISTERINGSNUMMER? [JA/NEJ]\n\n")
print ("\n")
# Kontrollera ett till registreringsnummer
if (fortsatt_kontroll.upper() == "JA"):
pass
# Återgår till huvudmenyn
elif (fortsatt_kontroll.upper() == "NEJ"):
state_kontroll = False
# Ogiltig inmatning
else:
print ("OGILTIG INMATNING!\n\n")
state_kontroll = False
while state_avregistrering:
print ("*AVREGISTRERING*\n\n")
# Inmatning av registreringsnummer för avregistrering
avregistrering = input("VILKET REGISTRERINGSNUMMER VILL DU AVREGISTRERA FRÅN DATABASEN? [UTAN MELLANSLAG]\n\n")
print ("\n")
# Kontrollerar att registreringsnumret har rätt längd
# Om registreringsnumret har fel längd
if (len(avregistrering) != int(6)):
print ("OGILTIG INMATNING!\n")
state_avregistrering = False
# Om registreringsnumret har rätt längd
else:
# Kontrollerar om registreringsnumret finns i databasen
# Om registreringsnumret inte finns i databasen
if avregistrering.upper() not in open('brottby.txt').read():
print ("REGISTRERINGSNUMMER", avregistrering, "FINNS INTE I DATABASEN!\n")
state_avregistrering = False
# Om registreringsnumret finns i databasen
else:
# För att ta bort ett registreringsnummer ur databasen, måste vi skriva över all information utom den vi vill ta bort till en ny databas
# Vi förbereder genom att döpa om den nuvarande databasen (den ska sen raderas)
os.rename('brottby.txt', 'gammalbrottby.txt')
# Skriver över all information från nuvarandra databas till ny, undantaget det avregistrerade registreringsnumret
with open("gammalbrottby.txt", "r") as input:
with open("brottby.txt", "w") as output:
for line in input:
# Om registreringsnumret vi vill ta bort inte finns på en viss rad, skriv över den raden till den nya filen
if (avregistrering.upper() not in line):
output.write(line)
# Om registreringsnumret vi vill ta bort finns i en viss rad, skriv inte över den
else:
continue
# Vi har nu skapat en ny databas, och raderar därför den gamla
os.remove('gammalbrottby.txt')
print ("FORDON", avregistrering, "ÄR NU AVREGISTRERAD FRÅN DATABASEN!")
# Frågar användaren om hen vill avsluta programmet eller återgå till huvudmenyn
fortsatt_kontroll = input("VILL DU AVREGISTRERA ETT TILL REGISTRERINGSNUMMER FRÅN DATABASEN? [JA/NEJ]\n\n")
print ("\n")
# Avregistrera ett till registreringsnummer
if (fortsatt_kontroll.upper() == "JA"):
pass
# Återgår till huvudmenyn
elif (fortsatt_kontroll.upper() == "NEJ"):
state_kontroll = False
# Ogiltig inmatning
else:
print ("OGILTIG INMATNING!\n\n")
state_kontroll = False
# Printar förteckning av alla stulna bilar
while state_forteckning:
print ("*FÖRTECKNING*\n\n")
# För att förteckningen ska vara välformaterad, måste alla blankrader tas bort ur databasen
# Vi döper om nuvarande databasen, som sedan ska raderas
os.rename('brottby.txt', 'gammalbrottby.txt')
# Kopierar gamla databasen rad för rad till en ny databas, undantaget om det är en blankrad
with open("gammalbrottby.txt", "r") as input:
with open("brottby.txt", "w") as output:
for line in input.readlines():
if not line.strip():
continue
else:
output.write(line)
# Raderar gamla databasen
os.remove('gammalbrottby.txt')
# För att förteckningen ska vara välformaterad, måste det sista registreringsnumret i dokumentet följas av en nyrad
with open("brottby.txt", "a") as f:
f.write("\n")
# Printar nu hela databasen, rad för rad, i bokstavsordning (sorted)
forteckningslista = []
with open("brottby.txt", "r") as f:
for line in sorted(f):
print (line)
# Återgår till huvudmenyn
print ("\n")
state_forteckning = False
# Avsluta programmet
while state_avsluta:
print ("*AVSLUTAR PROGRAMMET*\n\n")
# Avslutar programmet
sys.exit()
问题在于您正在重新定义或“隐藏”内置函数的名称
input
while True:
foo = input('What? ')
print('Foo is ', foo)
with open('/dev/null', 'w') as input: # <-- input is being redefined here!
pass
# run the code:
What? bar
Foo is bar
Traceback (most recent call last):
...
foo = input('What? ')
TypeError: '_io.TextIOWrapper' object is not callable
with open("gammalbrottby.txt", "r") as inputfile:
with open("brottby.txt", "w") as output:
for line in inputfile:
...