وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

نام “تصادفی” در پایتون تعریف نشده است

0 8
زمان لازم برای مطالعه: 4 دقیقه


معرفی

در پایتون، یکی از رایج ترین خطاهایی که مبتدیان و حتی برخی از برنامه نویسان باتجربه با آن مواجه می شوند، 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 تمام ماژول های لازم در ابتدای اسکریپت شما. واردات در این بلوک ها باید برای موارد خاص باشد.

پیشنهاد می‌کنیم بخوانید:  append() vs extend() vs insert() در لیست های پایتون

با حرکت دادن 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید