Python 为什么我会犯错误;回溯(最近一次调用last“和”TypeError:“io.TextIOWrapper&“x27”对象不可调用”;

Python 为什么我会犯错误;回溯(最近一次调用last“和”TypeError:“io.TextIOWrapper&“x27”对象不可调用”;,python,Python,每当我运行代码时,都会收到以下错误消息: 有人能帮我找出错误吗?我为语言道歉,但我的编程老师更喜欢用瑞典语接收我们的脚本 该计划的要点是,它允许警察在数据库(brottby.txt)中登记(inmatning)被盗车辆。警察还可以检查是否在数据库(kontroll)中登记了车牌,注销车牌(AvRegistering),并打印所有被盗车辆的完整列表(forteckning) 当我运行打印被盗车辆完整列表的部分(由“while state_forteckning:”指定)时,会发生错误。我打印文档

每当我运行代码时,都会收到以下错误消息:

有人能帮我找出错误吗?我为语言道歉,但我的编程老师更喜欢用瑞典语接收我们的脚本

该计划的要点是,它允许警察在数据库(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:
        ...