از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
نام “تصادفی” در پایتون تعریف نشده است
سرفصلهای مطلب
معرفی
در پایتون، یکی از رایج ترین خطاهایی که مبتدیان و حتی برخی از برنامه نویسان باتجربه با آن مواجه می شوند، NameError: name 'random' is not defined
. این خطا اغلب هنگام تلاش برای استفاده از آن ظاهر می شود random
ماژول بدون وارد کردن صحیح آن.
در این بایت، این خطا را درک می کنیم و روش صحیح آن را یاد می گیریم import و استفاده کنید random
ماژول در پایتون
درک خطا
قبل از اینکه به رفع مشکل بپردازیم، ابتدا معنی این خطا را درک می کنیم. این NameError: name 'random' is not defined
هنگامی که سعی می کنید از آن استفاده کنید، خطا ایجاد می شود random
ماژول یا تابعی از آن، بدون اینکه ابتدا آن را در اسکریپت خود وارد کنید. این به این دلیل است که پایتون به دلایل عملکرد به طور خودکار همه ماژول ها را هنگام راه اندازی بارگذاری نمی کند. در اینجا یک نمونه از این خطا آورده شده است:
print(random.randint(1, 10))
خروجی:
NameError: name 'random' is not defined
همانطور که می بینید، تلاش برای استفاده random.randint()
بدون اینکه ابتدا وارد کنید random
نتایج ماژول در NameError
.
واردات تصادفی مدول
برای استفاده از random
ماژول یا هر ماژول دیگری در پایتون، شما نیاز دارید import ابتدا آن را این import
عبارت در پایتون برای بارگذاری یک ماژول در اسکریپت شما استفاده می شود. در اینجا روش شما می توانید import آی تی:
import random
print(random.randint(1, 10))
خروجی:
7
اکنون، اسکریپت به خوبی کار می کند زیرا ما آن را وارد کرده ایم random
ماژول قبل از استفاده از آن randint
تابع.
توجه داشته باشید: مبتدیان، به یاد داشته باشید که import
قبل از فراخوانی هر تابعی که از ماژول استفاده می کند، دستور باید در ابتدای اسکریپت شما قرار گیرد!
محدوده مناسب برای ماژول ها
چیز دیگری که می تواند برنامه نویسان را تحت تاثیر قرار دهد، محدوده ماژول است. درک محدوده مهم است، به خصوص زمانی که ماژول ها را در بالای فایل منبع خود وارد نمی کنید. وقتی تو import یک ماژول، فقط در محدوده ای که آن را وارد کرده اید در دسترس است. پس اگر شما import یک ماژول در داخل یک تابع، در دسترس نخواهد بود خارج از که تابع از آن است خارج از دامنه.
در اینجا یک مثال است:
def generate_random_number():
import random
return random.randint(1, 10)
print(generate_random_number())
print(random.randint(1, 10))
خروجی:
5
NameError: name 'random' is not defined
همانطور که می بینید، random
ماژول خارج از آن در دسترس نیست generate_random_number
تابع. برای در دسترس قرار دادن یک ماژول برای کل اسکریپت خود، import آن را در سطح بالای اسکریپت شما، خارج از هر تابع یا کلاسی قرار دهید.
از واردات خودداری کنید امتحان کنید/به جز بلوک ها
در پایتون، استفاده از آن یک روش معمول است try/except
بلوک هایی برای رسیدگی به استثناها. با این حال، وارد کردن ماژول ها در این بلوک ها می تواند باعث ایجاد خطاهای غیرمنتظره شود. یک اشتباه رایج این است که قرار دادن import بیانیه خارج از try
بلوک، که می تواند منجر به a NameError
اگر خطایی قبل از import.
در اینجا یک قطعه کد وجود دارد که مشکل را نشان می دهد:
try:
// Some code...
import random
num = random.randint(1, 10)
except Exception:
print("Oh no! An error...")
num = random.randint(1, 10)
در این کد، اگر یک استثنا رخ دهد قبل از را import random
خط، import دستور حذف خواهد شد، و هر کد بعدی که از آن استفاده می کند random
ماژول با شکست مواجه خواهد شد NameError: name 'random' is not defined
خطا
توجه داشته باشید: بهتر است از وارد کردن ماژول ها خودداری کنید try/except
بلوک ها در عوض، همیشه import تمام ماژول های لازم در ابتدای اسکریپت شما. واردات در این بلوک ها باید برای موارد خاص باشد.
با حرکت دادن import بیانیه خارج از try
بلاک کنید، مطمئن می شوید که ماژول همیشه در اسکریپت شما در دسترس است، حتی اگر کد داخل آن باشد try
بلوک یک استثنا ایجاد می کند.
وارد کردن توابع خاص از تصادفی مدول
به جای واردات کل random
ماژول، شما می توانید import فقط توابع خاصی که نیاز دارید. این کار با استفاده از from ... import ...
بیانیه.
from random import randint, choice
در حال حاضر، شما می توانید به طور مستقیم استفاده کنید randint
و choice
بدون پیشوند آنها با random
.
num = randint(1, 10)
letter = choice('abc')
فقط مطمئن شوید که در هنگام فراخوانی فقط از این نام های توابع استفاده کنید و نه random.randint()
به عنوان مثال، برای جلوگیری از NameError
.
رفع خطای “تصادفی” هیچ ویژگی “X” ندارد
خطا AttributeError: 'module' object has no attribute 'X'
زمانی اتفاق میافتد که میخواهید به یک تابع یا ویژگی که در ماژول وجود ندارد دسترسی پیدا کنید. این ممکن است به دلیل اشتباه تایپی در نام تابع باشد یا ممکن است تابع در ماژول وجود نداشته باشد.
import random
num = random.randit(1, 10)
در کد بالا، randit
اشتباه تایپی است و باید باشد randint
. با تصحیح اشتباه تایپی، خطا برطرف می شود.
import random
num = random.randint(1, 10)
نتیجه
در این بایت، چندین خطای احتمالی در مورد وارد کردن ماژولها، بهویژه ماژولها را پوشش دادهایم random
مدول. به طور خاص، ما به خطا نگاه کردیم NameError: name 'random' is not defined
و روش حل آن
ما همچنین برخی از خطاهای مرتبط را که هنگام کار با آن رخ می دهد، بررسی کرده ایم random
ماژول، مانند AttributeError: 'module' object has no attribute 'choice'
و روش رفع آنها
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-29 15:55:04