[python] ValueError : 기본 10 인 int ()에 대한 잘못된 리터럴 : ”

파일을 읽는 프로그램을 만들고 있는데 파일의 첫 줄이 비어 있지 않으면 다음 네 줄을 읽습니다. 해당 행에 대해 계산을 수행 한 후 다음 행을 읽습니다. 해당 줄이 비어 있지 않으면 계속 진행됩니다. 그러나이 오류가 발생합니다.

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

첫 번째 줄을 읽고 있지만 정수로 변환 할 수 없습니다.

이 문제를 해결하려면 어떻게해야합니까?

코드:

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())



답변

기록만을 위해서:

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

여기로

>>> int(float('55063.000000'))
55063.0

사용해야합니다!


답변

다음은 파이썬에서 완전히 허용됩니다.

  • 정수의 문자열 표현을 int
  • float의 문자열 표현을 float
  • 정수의 문자열 표현을 float
  • 플로트를 int
  • 정수를 전달 float

그러나 당신은 얻을 ValueError당신이의 캐릭터 라인 표현 전달하면 플로트int, 또는 아무것도의 문자열 표현하지만 (빈 문자열 포함)의 정수를. int@katyhuff가 위에서 지적한 것처럼 float의 문자열 표현을에 전달 하려면 먼저 float로 변환 한 다음 정수로 변환 할 수 있습니다.

>>> 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


답변

파일을 반복하고 int로 변환하는 Pythonic 방법 :

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

당신이하려는 것은 약간 더 복잡하지만 여전히 간단하지는 않습니다.

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

이런 식으로 한 번에 5 개의 라인을 처리합니다. 사용 h.next()하는 대신 next(h)파이썬 2.6 이전.

당신이 한 이유는 ValueError때문이다 int정수에 빈 문자열을 변환 할 수 없습니다. 이 경우 변환하기 전에 문자열의 내용을 확인하거나 오류를 제외해야합니다.

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


답변

해결 방법을 찾았습니다. 파이썬은 숫자를 실수로 변환합니다. float를 먼저 호출 한 다음 int로 변환하면 다음과 같이 작동합니다.
output = int(float(input))


답변

그 이유는 빈 문자열이나 문자열을 int의 인수로 받기 때문입니다. 비어 있거나 알파벳 문자가 포함되어 있는지 확인하십시오. 문자가 포함되어 있으면 해당 부분을 무시하십시오.


답변

이 오류가 발생하는 이유는 공백 문자를 정수로 변환하려고 시도하기 때문에 완전히 불가능하고 제한되어 있기 때문에이 오류가 발생하는 것입니다.여기에 이미지 설명을 입력하십시오

코드를 확인하고 수정하면 제대로 작동합니다.


답변

당신이 가지고 있다면

floatInString = '5.0'

당신은로 변환 할 수 있습니다 intfloatInInt = int(float(floatInString))