انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: pakseresht در 19 دی 1395، 05:37 ق‌ظ

عنوان: مشکل randrange
ارسال شده توسط: pakseresht در 19 دی 1395، 05:37 ق‌ظ
سلام و وقت بخیر
من دقیقا نمی دونم کجا باید سوالمو بپرسم ولی چون خیلی کارم گیره، نوشتم.
یه تیکه کد توی پایتون دارم که برای اینکه به نتیجه برسه باید خطاهاشو رفع کنم. تیکه کد اینه:
def propagateLabel(G):
    visitSequence = random.sample(G.nodes(),len(G.nodes()))
    for i in visitSequence:
        node = G.node[i]
        label = node["label"]
        dict = getMaxNeighborLabel(G, i)

        if(not dict.has_key(label)):
            newLabel = dict.keys()[random.randrange(len(dict.keys()))]
            node["label"] = newLabel
            # dict.keys() -> list of dict's keys
قسمتی که خطا می ده برای این قسمته:
random.randrange(len(dict.keys()))

و خطایی که نشون می ده اینه:
191                     return self._randbelow(istart)
    192                 return _int(self.random() * istart)
--> 193             raise ValueError, "empty range for randrange()"
    194
    195         # stop argument supplied.

ValueError: empty range for randrange()
ممکنه اینجا کسی بتونه کمک کنه؟
عنوان: پاسخ : مشکل randrange
ارسال شده توسط: ارباب! در 19 دی 1395، 07:53 ق‌ظ
سلام.
احتمالش هست مشکل این باشه که یادتون رفته ورودی randrange رو به علاوه ی 1 کنید..؟
(علت این که گاهی وقتا باید به علاوه 1 کنید اینه که وقتی می خواید از 0 تا n تولید بشه باید 1+n رو بدید به عنوان ورودی چون خود آخری رو تولید نمی کنه..)
(یادتون نره این جور مواقع می تونید از بدوی ترین راه debug کردن ینی کلی print لابه لای خطوط کدتون استفاده کنید تا مچشو رو بگیرید..)
(همچنین کداتونم تو تگ code بذارید که خوانا تر باشه.. اون بالا علامت # داره..)

ویرایش:
با توجه به توضیحات و کدتون معلومه که اگه تعداد کلید های دیکشنریتون 0 باشه ورودی randrange برابر با 0 می شه که به مشکل می خوره.. پس خروجی len رو به علاوه ی 1 کنید ببینید درست می شه یا نه..
عنوان: پاسخ : مشکل randrange
ارسال شده توسط: دانیال بهزادی در 19 دی 1395، 10:55 ق‌ظ
کد کامل رو بذار
عنوان: پاسخ : مشکل randrange
ارسال شده توسط: nixoeen در 20 دی 1395، 01:52 ق‌ظ
این مشکل وقتی پیش میاد که dict هیچ عضوی نداشته باشه و مسلما باید قبل از اینکه وارد این بخش کد بشید، چک کنید که dict حداقل یک عضو داشته باشه.