2014-09-18 139 views
1

我有問題擺脫了Python中的循環。它只是不會爆發。不能擺脫Python循環

這裏是dl.py:

#! /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'; 

它只是循環永遠,我不明白爲什麼。 Python不是我的母語,我用它來編寫一些shell腳本。

我運行它像這樣./dl.py http://url.com 3

我在做什麼錯?

+0

這可能是因爲'limit'是一個字符串,嘗試'計數> = int(limit)'你也可以改變'for'循環的'while'。 – fredtantini 2014-09-18 21:49:48

+1

@Cyber​​這不是如何工作! – jonrsharpe 2014-09-18 21:50:58

回答

6

您需要將limit轉換爲使用int(limit)的整數。在Python 2.x 3 > '2'總是返回False所以你的循環永遠不會完成。

+0

謝謝!接受你的第一個答案。 – 2014-09-18 21:50:38

+0

你的聲明'3>'2「'是'False'只在Python 2中是準確的。在Python 3中,這是一個錯誤,並且會引發一個異常 – Blckknght 2014-09-18 21:52:58

+2

只能保證在CPython 2中準確。一般來說,在Python 2中, 「這樣的對象是一致的,但任意排序」 - https://docs.python.org/2/library/stdtypes.html#comparisons – 2014-09-18 21:53:51

-2

嘗試重新格式化while循環以包含您試圖擺脫的語句。此外,您需要將您的str limit投射到int。雖然您的while True循環將起作用,但使用True語句而不是限定循環的限定條件並不是while循環的最佳做法。

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

在循環中每循環轉換一個常量循環限制並不是最佳做法 – 2014-09-18 21:59:01

1

你需要(在命令行中讀取時,否則將被視爲由Python中的字符串)limit轉換爲使用int(limit)整數。整數被評估爲小於字符串(至少在Python 2中)。

>>> int < str 
True 
+0

請注意,這個問題只會在Python 2中存在(在這種形式下)。在Python 3中,比較不像類型通常是一個錯誤! – Blckknght 2014-09-18 21:51:40

+0

@Blckknght謝謝!我會在我的答案中注意到。 – 2014-09-18 21:52:17

0

的問題是,sys.argv[2]將返回一個字符串,當你比較字符串在Python中的一個整數,字符串總是更大。請嘗試使用if count >= int(limit):

0

您可以調用sys.argv只是一個時間,當你有很多ARG和使用int的限制,因爲從輸入sys.argv GET字符串:

user_args = sys.argv[1:] 
url, limit = user_args 
limit=int(limit)