파일을 읽는 프로그램을 만들고 있는데 파일의 첫 줄이 비어 있지 않으면 다음 네 줄을 읽습니다. 해당 행에 대해 계산을 수행 한 후 다음 행을 읽습니다. 해당 줄이 비어 있지 않으면 계속 진행됩니다. 그러나이 오류가 발생합니다.
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의 인수로 받기 때문입니다. 비어 있거나 알파벳 문자가 포함되어 있는지 확인하십시오. 문자가 포함되어 있으면 해당 부분을 무시하십시오.
