2016-12-30 3 views
0

저는 파이썬 코딩에 익숙하지 않습니다. 최근에 API와 JSON에 대해 배웠습니다. 나는 난수 생성기 (https://www.random.org/)와 상호 작용할 수있는 작은 테스트 코드를 작성했다. 그것은 훌륭하게 작동하지만 최근에는 JSONDecodeError를 무작위로 그리고 지속적으로 실행하고 있습니다. 때때로 발생하지만 모든 시간이 아닙니다. 코드를 실행하고 오류를 가져오고 아무 것도 변경하지 않은 다음 10 분 후에 코드를 실행하여 오류가 발생하지 않도록 할 수 있습니다. API가 브라우저를 통해 실행되는지 다시 확인했습니다. 다음은 그 기본이다 :무작위 json.decoder.JSONDecodeError : 기대 값 : 1 행 1 (char 0)

서면과를 통해 실행
PyCharm 커뮤니티 에디션 2016년 3월 1일
빌드 # PC-163.9735.8 년 12 월 14 일에 내장 된 2016
JRE : 1.8.0_112 출시-408-를 오픈 JDK 서버 VM JetBrains의 sro의

import requests 
import json 

print("Random Number Generator:") 
print("========================") 

# RANDOM NUMBER GEN 
response01 = requests.get(
"https://www.random.org/integers/?num=1&min=1&max=999999999&col=1&base=10&format=plain&rnd=new") 
data1 = response01.json() 

print(type(data1)) 
print(data1) 

이 코드는 단지 API에서 임의의 숫자를 출력하여 : JVM B6 86
.

Random Number Generator: 
======================== 
Traceback (most recent call last): 
    File "C:/REDACTED/REDACTED/REDACTED/REDACTED/API Practice 2.py", line 10, in <module> 
    data1 = response01.json() 
    File "C:\Program Files (x86)\Python35-32\lib\site-packages\requests\models.py", line 850, in json 
    return complexjson.loads(self.text, **kwargs) 
    File "C:\Program Files (x86)\Python35-32\lib\json\__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "C:\Program Files (x86)\Python35-32\lib\json\decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Program Files (x86)\Python35-32\lib\json\decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

Process finished with exit code 1 

그래서 내가 가지고있는 질문은 두 부분의 일종이다 : 여기에 내가 얻을 임의의 오류입니다.
A)이 오류의 원인은 무엇입니까?
B) 왜 (임의적으로) 발생합니까?

누구든지 제공 할 수있는 정보에 감사드립니다. 다시 말하지만, 저는 파이썬에 대한 NOOB입니다. 제발 나의 무지 함이나 부족함, 교육에 신경 쓰십시오.

참고 : REDACTED은 단지 하나의 자리 표시 자입니다.

+0

동일한 요청을 발행 할 때 서버로부터 503 응답을 얻고 있습니다. 예 : 'response01.json()'줄을 시도하기 전에 :'print response01.status_code' – abigperson

+0

AH! 그게 내가이 새로운 방법이야! 나는 그것을 간과했다. 나는 곧바로 내 코드가 잘못되었다고 가정했다. 도와 주셔서 정말 감사합니다! –

+0

쿨, 다행스럽게 도울 수있었습니다! – abigperson

답변

0

때때로 HTTP 오류가 발생하고 응답 객체에 내용이 없으므로 구문 분석 할 수 없습니다.

import requests 
import json 

print("Random Number Generator:") 
print("========================") 

# RANDOM NUMBER GEN 
response01 = requests.get("https://www.random.org/integers/?num=1&min=1&max=999999999&col=1&base=10&format=plain&rnd=new") 
try : 
    data1 = json.loads(response01) 
    print('[i] Response : %s' % data1) 
except JSONDecodeError as e : 
    print('[!] Error while decoding response contents') 
    print('[!] %s - %s' % (response01.status_code, response01.text)) 
    # here you could replay the request 
관련 문제