انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: 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 رو به علاوه ی 1 کنید..؟
(علت این که گاهی وقتا باید به علاوه 1 کنید اینه که وقتی می خواید از 0 تا n تولید بشه باید 1+n رو بدید به عنوان ورودی چون خود آخری رو تولید نمی کنه..)
(یادتون نره این جور مواقع می تونید از بدوی ترین راه debug کردن ینی کلی print لابه لای خطوط کدتون استفاده کنید تا مچشو رو بگیرید..)
(همچنین کداتونم تو تگ code بذارید که خوانا تر باشه.. اون بالا علامت # داره..)
ویرایش:
با توجه به توضیحات و کدتون معلومه که اگه تعداد کلید های دیکشنریتون 0 باشه ورودی randrange برابر با 0 می شه که به مشکل می خوره.. پس خروجی len رو به علاوه ی 1 کنید ببینید درست می شه یا نه..
-
کد کامل رو بذار
-
این مشکل وقتی پیش میاد که dict هیچ عضوی نداشته باشه و مسلما باید قبل از اینکه وارد این بخش کد بشید، چک کنید که dict حداقل یک عضو داشته باشه.