2016-03-21 14 views
0

Aşağıdaki kod parçacığında, https://asdasdasdasd.vm:8080/v2/api-docs'un mevcut olmadığı bir gerçeği biliyorum. Bir DNS araması başarısız olur. Ne yazık ki, get() asla geri dönmüyor, yükseltmiyor ya da zaman aşımı vermiyor. Benim günlüklerimde sadece "A" var. A C D veya A B D beklerim. Ama sadece günlüklerinde A'u görüyorum.Sunucu bulunamadığı sırada requests.get() neden yükseltilmez?

try: 
    sys.stderr.write("A") 
    resp = requests.get("https://asdasdasdasd.vm:8080/v2/api-docs", timeout=1.0) 
    sys.stderr.write("B") 
except: 
    sys.stderr.write("C") 
sys.stderr.write("D") 
sys.stderr.flush() 
return swag 

(Yani URL yazı için arındırılmış değildir. Yani aslında bu soru üzerinde çalışırken kullanmaya çalışıyorum URL'sidir.) Ben burada eksik

?

EDIT - Zaman aşımını (1.0,1.0) olarak belirtmeyi denedim ancak davranış değişmedi.

EDIT2 - Aşağıdaki önerilerde, kodumu python ve ipython konsollarından çalıştırdım. Kod beklediğim gibi davranır (ACD). Elbette, gerçek uygulamamda, bu kodu komut satırından çalıştırmıyorum. Bunun nasıl önemli olduğunu bilmiyorum, ancak kodu içeren yöntem bir web hizmeti tarafından çalıştırılıyor. Özellikle, bir Swagger uç noktası. Tarayıcımla, Swagger dokümantasyonumuzu iade etmesi gereken bir son noktaya geldim. Bitiş noktası (flask_swagger kullanır) init_swagger(...)'u çağırır. init_swagger(), yöntemimi bir Swagger nesnesiyle çağırır. Bu kadar. Bunun nasıl önemli olduğunu söyleyemem. Metodumun dışındaki bir şeyin, istisnasız kullanımımla bir şekilde çatışabilmesi gerektiği bana mantıklı gelmiyor.

Düşünebildiğim tek şey, Swagger'ın istek sınıfı ile uğraşmasıdır. Ama şimdi yemek zamanı ve eve gidiyorum.

+0

, çalıştığımda bir ConnectionError atar ... –

+0

Ubuntu Trusty'de Python 2.7.6 ile istekleri 2.2.1 (veya 2.7.0) kullanarak, "ACD" alırım. – jwodder

+0

Neden ABCD' veya ABD’yi bekliyorsunuz? Doğru olan 'ACD' olmalı ve kodunuzu çalıştırdığımda aldığım bu. – Vader

cevap

1

benim için aşağıdaki kod A, C, D

import requests 
from requests.exceptions import ConnectionError 

try: 
    print("A") 
    resp = requests.get("https://asdasdasdasd.vm:8080/v2/api-docs", timeout=1.0) 
    print("B") 
except ConnectionError: 
    print("C") 
print("D") 

Bu benim localhost için takas eğer ev sahibi, benim için çözülemeyen çünkü ...

resp = requests.get("http://localhost/v2/api-docs", timeout=1.0) 

... Sonra döner Bir A görüyorum, C ve D gösterisinden önce bir süre izledim.

Yorumlar okunurken, ne olduğunu biliyorum ... builtins kullanılabilecek bir ConnectionError vardır (herhangi bir şey almadan). İstekler bu istisnayı kullanmaz, ConnectionError'u yakalamak istiyorsanız, requests.exceptions'da bulunanları kullanır, doğru istisnayı yakalamanız gerekir, yoksa except maddesini çalıştırmaz ve çalıştırmaz.

+0

I * dilek * bir istisna yükseltildi. A'dan sonra * hiçbir şey * alıyorum. –

+1

Yukarıdaki örnekteki istisnayı yakaladığınız için, 'try'' except' deyimini kaldırmanız gerekir. Kodumu yeni bir dosyaya kopyalayın, çalıştırın ve çıktıyla yayınınızı düzenleyin. – duFF

+0

Bunu yapacağım. Ama eğer istisnayı yakalasaydım, bu benim amacım olan, C 'yi görmez miydim? Veya bir ConnectionError bir istisna değil mi ?? –

İlgili konular