2014-09-18 3 views
1

파이썬에서 루프를 벗어나는 데 문제가있다. 그것은 결코 깬 것이 아닙니다. 그것은 영원히 루프파이썬 루프에서 빠져 나올 수 없다.

#! /usr/bin/python 
import urllib 
import urllib2 
import os 
import sys 
import re 
from pyquery import PyQuery as pq 

url = sys.argv[1] 
limit = sys.argv[2] 

count = 0 

while True : 
    if count >= limit : 
     break 
    print 1; 
    count += 1 

print 'Complete ... exiting'; 

, 나는 이유를 이해할 수 없다 : 여기

는 dl.py입니다. 파이썬은 제 모국어가 아니기 때문에 일부 쉘 스크립트를 코딩하는 데 사용하고 있습니다.

나는 내가 뭘 잘못 때문에 ./dl.py http://url.com 3

처럼 실행?

+0

그것은 limit'는 문자열'일 수 있었다,> 계산 '시도 = int (limit)''for' 루프에 대해서'while'을 변경할 수도 있습니다. – fredtantini

+1

@Cyber ​​그게 어떻게 작동하지 않습니다! – jonrsharpe

답변

6

int(limit)을 사용하여 limit을 정수로 변환해야합니다. Python 2.x에서 3 > '2'입니다. 항상 return False이므로 루프가 완료되지 않습니다.

+0

고마워요! 처음 대답 할 때 받아 들일 것입니다. –

+0

'3> '2''가'False'라는 문장은 파이썬 2에서만 정확합니다. 파이썬 3에서는 에러가 발생하고 예외가 발생합니다 – Blckknght

+2

파이썬 2에서는 Generality, "그러한 객체는 일관되게하지만 임의로 정렬됩니다."- https://docs.python.org/2/library/stdtypes.html#comparisons –

-2

중단하려는 구문을 포함하도록 while 루프를 다시 포맷하십시오. 또한 limitint으로 전송해야합니다. while True 루프가 작동하는 동안 True 문을 사용하여 루프를 중단하는 자격 대신 while 루프를 사용하는 것이 좋습니다.

while count <= int(limit): 
    print 1; 
    count += 1 
+0

루프를 돌릴 때마다 상수 루프 제한을 변환하는 것이 최선의 방법은 아닙니다 –

1

당신은 (명령 줄에서 읽을 때 다른 사람이 파이썬으로 문자열로 처리됩니다) int(limit)를 사용하여 정수로 limit 변환해야합니다. 정수는 문자열보다 적은 것으로 평가됩니다 (적어도 Python 2에서는).

>>> int < str 
True 
+0

이 문제는 Python 2에만 존재합니다 (이 형식으로). Python 3에서 일반적으로 타입이 다르다! – Blckknght

+0

@Blckknght 감사합니다! –

0

문제는 sys.argv[2] 문자열을 반환 할 것입니다, 당신은 파이썬에서 정수와 문자열을 비교할 때, 문자열은 항상 크다. 대신 if count >= int(limit):을 사용해보세요.

0

당신은 당신이 많은 인수가있을 때 sys.argv 한 시간을 호출하고 입력에서 sys.argv GET 문자열이 있기 때문에 한계에 대한 int를 사용할 수 있습니다

user_args = sys.argv[1:] 
url, limit = user_args 
limit=int(limit) 
관련 문제