ValueError: ongeldige letterlijke waarde voor int() met grondtal 10: ”

Ik ben een programma aan het maken dat een bestand leest en als de eerste regel van het bestand niet leeg is, leest het de volgende vier regels. Op die regels worden berekeningen uitgevoerd en vervolgens wordt de volgende regel gelezen. Als die regel niet leeg is, gaat hij verder. Ik krijg echter deze foutmelding:

ValueError: invalid literal for int() with base 10: ''.

Het leest de eerste regel, maar kan het niet converteren naar een geheel getal.

Wat kan ik doen om dit probleem op te lossen?

De code:

file_to_read = raw_input("Enter file name of tests (empty string to end program):")
try:
    infile = open(file_to_read, 'r')
    while file_to_read != " ":
        file_to_write = raw_input("Enter output file name (.csv will be appended to it):")
        file_to_write = file_to_write + ".csv"
        outfile = open(file_to_write, "w")
        readings = (infile.readline())
        print readings
        while readings != 0:
            global count
            readings = int(readings)
            minimum = (infile.readline())
            maximum = (infile.readline())

Antwoord 1, autoriteit 100%

Voor de goede orde:

>>> int('55063.000000')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '55063.000000'

Hier ben ik…

>>> int(float('55063.000000'))
55063

Moet worden gebruikt!

Antwoord 2, autoriteit 23%

Het volgende is volledig acceptabel in python:

  • een tekenreeksrepresentatie van een geheel getal doorgeven aan int
  • een tekenreeksrepresentatie van een float doorgeven aan float
  • een tekenreeksrepresentatie van een geheel getal doorgeven aan float
  • een vlotter doorgeven aan int
  • een geheel getal doorgeven aan float

Maar u krijgt een ValueError als u een tekenreeksrepresentatie van een float doorgeeft aan int, of een tekenreeksrepresentatie van alles behalve een geheel getal (inclusief lege string). Als je een tekenreeksrepresentatie van een float wilt doorgeven aan een int, zoals @katyhuff hierboven aangeeft, kun je eerst converteren naar een float en vervolgens naar een geheel getal:

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

Antwoord 3, autoriteit 13%

Pythonische manier om een ​​bestand te herhalen en te converteren naar int:

for line in open(fname):
   if line.strip():           # line contains eol character(s)
       n = int(line)          # assuming single integer on each line

Wat je probeert te doen is iets ingewikkelder, maar nog steeds niet eenvoudig:

h = open(fname)
for line in h:
    if line.strip():
        [int(next(h).strip()) for _ in range(4)]     # list of integers

Op deze manier verwerkt het 5 regels tegelijk. Gebruik h.next() in plaats van next(h) voorafgaand aan Python 2.6.

De reden dat u ValueError had, is omdat int een lege tekenreeks niet naar een geheel getal kan converteren. In dit geval moet u ofwel de inhoud van de tekenreeks controleren vóór de conversie, of een fout uitsluiten:

try:
   int('')
except ValueError:
   pass      # or whatever

Antwoord 4, autoriteit 5%

Ik heb een oplossing gevonden. Python converteert het getal naar een float. Gewoon eerst float aanroepen en dat vervolgens converteren naar een int zal werken:
output = int(float(input))

Antwoord 5, autoriteit 3%

De reden is dat je een lege string of een string als argument in int krijgt. Controleer of het leeg is of alfatekens bevat. Als het tekens bevat, negeer dat deel dan gewoon.

Antwoord 6, autoriteit 2%

De reden dat u deze foutmelding krijgt, is dat u probeert een spatieteken om te zetten in een geheel getal, wat totaal onmogelijk en beperkt is. En daarom krijgt u deze foutmelding.voer hier de afbeeldingsbeschrijving in

Controleer uw code en corrigeer deze, het zal goed werken

Antwoord 7, autoriteit 2%

Dus als je

. hebt

floatInString = '5.0'

Je kunt het converteren naar int met floatInInt = int(float(floatInString))

Antwoord 8

Je hebt een probleem met deze regel:

while file_to_read != " ":

Dit vindt geen lege string. Het vindt een string die uit één spatie bestaat. Vermoedelijk is dit niet wat u zoekt.

Luister naar het advies van iedereen. Dit is niet erg idiomatische python-code en zou veel duidelijker zijn als je het bestand rechtstreeks herhaalt, maar ik denk dat dit probleem ook het vermelden waard is.

Antwoord 9

Test deze functie (split()) op een eenvoudig bestand. Ik had hetzelfde probleem en ontdekte dat dit kwam omdat split() niet correct was geschreven (afhandeling van uitzonderingen).

Antwoord 10

Ik kwam onlangs een geval tegen waarin geen van deze antwoorden werkte. Ik kwam CSV-gegevens tegen waar er null-bytes waren vermengd met de gegevens, en die null-bytes werden niet verwijderd. Dus mijn numerieke string, na het strippen, bestond uit bytes zoals deze:

\x00\x31\x00\x0d\x00

Om dit tegen te gaan, heb ik het volgende gedaan:

countStr = fields[3].replace('\x00', '').strip()
count = int(countStr)

…waar velden een lijst is met csv-waarden die het resultaat zijn van het splitsen van de regel.

Antwoord 11

    readings = (infile.readline())
    print readings
    while readings != 0:
        global count
        readings = int(readings)

Er is een probleem met die code. readings is een nieuwe regel die uit het bestand wordt gelezen – het is een string. Daarom moet je het niet vergelijken met 0. Verder kun je het niet zomaar naar een geheel getal converteren, tenzij je zeker weet dat het er inderdaad één is. Lege regels zullen hier bijvoorbeeld fouten opleveren (zoals je vast wel hebt ontdekt).

En waarom heb je de globale telling nodig? Dat is zeker een slecht ontwerp in Python.

Antwoord 12

Dit kan ook gebeuren wanneer u door spaties gescheiden gehele getallen moet toewijzen aan een lijst, maar u de gehele getallen regel voor regel invoert met behulp van de .input().
Zoals ik bijvoorbeeld dit probleem aan het oplossen was op HackerRank Bon-Appetit, en de kreeg de volgende fout tijdens het compileren:
voer hier de afbeeldingsbeschrijving in

Dus in plaats van regel voor regel invoer aan het programma te geven, probeer de door spaties gescheiden gehele getallen in een lijst te mappen met behulp van de map()-methode.

Antwoord 13

Ik ben een programma aan het maken dat a . leest
bestand en als de eerste regel van het bestand
is niet leeg, het leest de volgende vier
lijnen. Berekeningen worden uitgevoerd op
die regels en dan is de volgende regel
lees.

Zoiets zou moeten werken:

for line in infile:
    next_lines = []
    if line.strip():
        for i in xrange(4):
            try:
                next_lines.append(infile.next())
            except StopIteration:
                break
    # Do your calculation with "4 lines" here

Antwoord 14

Ik kreeg soortgelijke fouten, het bleek dat de dataset blanco waarden had die python niet naar een geheel getal kon converteren.

Antwoord 15

Ik kreeg hetzelfde probleem toen ik readlines() inside for loop probeerde te gebruiken voor hetzelfde bestandsobject… Mijn vermoeden is dat readling() in readline() voor hetzelfde bestandsobject deze fout veroorzaakte.

De beste oplossing is om seek(0) te gebruiken om de bestandsaanwijzer te resetten of
Behandel de voorwaarde door een vlag in te stellen en maak vervolgens een nieuw object voor hetzelfde bestand door de ingestelde voorwaarde aan te vinken….

Antwoord 16

Het lijkt erop dat de uitlezingen soms een lege tekenreeks zijn en dat er duidelijk een fout optreedt.
Je kunt een extra controle toevoegen aan je while-lus vóór het int(readings)-commando zoals:

while readings != 0 | readings != '':
    global count
    readings = int(readings)

Antwoord 17

Ik vond het moeilijk om de werkelijke reden te achterhalen, het gebeurt wanneer we niet goed uit een bestand lezen.
je moet het bestand openen en lezen met de methode readlines() zoals hieronder:

with open('/content/drive/pre-processed-users1.1.tsv') as f:
    file=f.readlines()

Het corrigeert de geformatteerde uitvoer

Antwoord 18

je antwoord geeft fouten vanwege deze regel

readings = int(readings)
  1. Hier probeer je een string om te zetten in een int type dat niet grondtal-10 is. je kunt een string alleen naar int converteren als deze base-10 is, anders wordt ValueError gegenereerd, met vermelding van ongeldige letterlijke waarde voor int() met base 10.

Antwoord 19

Nog een antwoord voor het geval alle bovenstaande oplossingen niet voor u werken.

Mijn oorspronkelijke fout was vergelijkbaar met OP: ValueError: ongeldige letterlijke waarde voor int() met grondtal 10: ‘52.002’

Ik probeerde toen het geaccepteerde antwoord en kreeg deze fout: ValueError: kon string niet converteren naar float: ‘52,002’ –dit was toen ik de int(float(variable_name))

Mijn oplossing is om de string om te zetten in een float en hem daar te laten. Ik moest alleen even controleren of de string een numerieke waarde was, zodat ik er goed mee om kan gaan.

try: 
   float(variable_name)
except ValueError:
   print("The value you entered was not a number, please enter a different number")

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes