2014-09-18 140 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)