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'
여기로 왔어요 ...
>>> float('55063.000000')
55063.0
사용해야합니다!
파일을 반복하고 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
다음은 파이썬에서 완전히 허용됩니다.
- 정수의 문자열 표현을
int
- float의 문자열 표현을
float
- 정수의 문자열 표현을
float
- 플로트를
int
- 정수를 전달
float
그러나 당신은 얻을 ValueError
당신이의 캐릭터 라인 표현 전달하면 플로트 로 int
, 또는 아무것도의 문자열 표현하지만 (빈 문자열 포함)의 정수를. int
@katyhuff가 위에서 지적한 것처럼 float의 문자열 표현을 a에 전달 하려면 먼저 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의 인수로 받고 있기 때문에 비어 있는지 또는 알파 문자가 포함되어 있는지 또는 단순히 해당 부분을 무시하는 것보다 포함되어 있는지 확인하십시오.
해결 방법을 찾았습니다. 파이썬은 숫자를 부동 소수점으로 변환합니다. float를 먼저 호출 한 다음 int로 변환하면 다음과 같이 작동합니다.output = int(float(input))
이 오류가 발생하는 이유는 공백 문자를 정수로 변환하려고했기 때문에 불가능하고 제한되어 있기 때문에이 오류가 발생하는 것입니다.
코드를 확인하고 수정하면 제대로 작동합니다.
이 줄에 문제가 있습니다.
while file_to_read != " ":
빈 문자열이 없습니다. 하나의 공백으로 구성된 문자열을 찾습니다. 아마도 이것은 당신이 찾고있는 것이 아닙니다.
다른 사람들의 조언을 들어라. 이것은 관용적 인 파이썬 코드는 아니며 파일을 직접 반복하면 훨씬 명확하지만이 문제는 주목할 가치가 있다고 생각합니다.
이 split()
파일 ( )을 간단한 파일로 테스트 하십시오. 나는 같은 문제에 직면하고 split()
있었고 제대로 작성되지 않았기 때문에 발견되었습니다 (예외 처리).
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
해당 코드에 문제가 있습니다. readings
파일에서 읽은 새 줄입니다. 문자열입니다. 따라서 0과 비교해서는 안됩니다. 또한 실제로 1 이 확실 하지 않으면 정수로 변환 할 수 없습니다 . 예를 들어 빈 줄은 여기에서 확실하게 오류를 생성합니다.
왜 글로벌 카운트가 필요한가요? 그것은 파이썬에서 가장 나쁜 디자인입니다.
공백으로 구분 된 정수를 목록에 매핑해야하지만을 사용하여 한 줄씩 정수를 입력 할 때도 발생할 수 있습니다 .input()
. 예를 들어 HackerRank Bon-Appetit 에서이 문제를 해결 하고 컴파일 중 다음 오류가 발생했습니다.
따라서 한 줄씩 프로그램에 입력하는 대신 공백으로 구분 된 정수를 map()
메소드를 사용하여 목록으로 매핑하십시오 .
파일을 읽는 프로그램을 만들고 있는데 파일의 첫 줄이 비어 있지 않으면 다음 네 줄을 읽습니다. 해당 줄에 대해 계산을 수행 한 후 다음 줄을 읽습니다.
이와 같은 것이 작동해야합니다.
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
비슷한 오류가 발생하여 데이터 세트에 파이썬이 정수로 변환 할 수없는 빈 값이 있음이 밝혀졌습니다.
동일한 파일 객체에 대해 for 루프 내부에서 readlines ()를 사용하려고 할 때도 같은 문제가 발생했습니다. 같은 파일 객체에 대해 readline () 내부에서 readling ()을 실행하면이 오류가 발생했습니다.
최상의 해결책은 seek (0)을 사용하여 일부 플래그를 설정하여 파일 포인터 또는 핸들 조건을 재설정 한 다음 설정된 조건을 확인하여 동일한 파일에 대한 새 객체를 만듭니다 ....
참고 URL : https://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10
'IT story' 카테고리의 다른 글
스크립트 순서로드 및 실행 (0) | 2020.04.09 |
---|---|
FOR 루프와 IF 문을 결합하는 파이썬 방식 (0) | 2020.04.09 |
요소에 BOTH 클래스가있는 경우에만 적용 할 CSS 규칙 (0) | 2020.04.09 |
Vim의 설정 파일에서“.vimrc”를 주석으로 처리하는 방법은 무엇입니까? (0) | 2020.04.09 |
to_string은 std의 멤버가 아닙니다 .g ++ (mingw) (0) | 2020.04.09 |