আমি কীভাবে পাইডেভকে "আমদানি থেকে অপরিজ্ঞাত পরিবর্তনশীল" ত্রুটিগুলি ঠিক করব?


138

আমি একিপসে পাইডেভ ব্যবহার করে পাইথন প্রকল্প পেয়েছি এবং পাইডেভ আমার কোডের জন্য মিথ্যা ত্রুটি তৈরি করে চলেছে। আমার একটি মডিউল রয়েছে settingsযা কোনও settingsবস্তুর সংজ্ঞা দেয় । আমি মডিউলে এটি আমদানি করি এবং এর bসাথে একটি বৈশিষ্ট্য নির্ধারণ করি:

from settings import settings
settings.main = object()

আমার কিছু কোডে - তবে এটির সমস্ত কিছুই নয়, বিবৃতিগুলির মতো:

from settings import settings
print settings.main 

... ইলেপস কোড ত্রুটি ফলকটিতে "মূল" বার্তাগুলি আমদানি থেকে উত্পন্ন করুন: কোডটি কোনও সমস্যা ছাড়াই চলে though আমি এগুলি কীভাবে সংশোধন করতে পারি?


আমি এই উত্তরগুলিতে পাইলিন্টের সাথে সম্পর্কিত কিছু দেখতে পাইনি: \ আমি মনে করি যে এই নোটিশটি কোথা থেকে উদ্ভূত হয়েছে এবং আমি পাইলটটি কীভাবে বলতে পারি যে এটি কোনও পরিবর্তনশীল নয়, এটি একটি আমদানি।
থারস্মমনার

উত্তর:


156

আপনার প্রকল্পের কোডের জন্য, একমাত্র উপায় একটি বিবৃতি যোগ করে বলছে যে আপনি প্রত্যাশা করেছিলেন যে - সম্ভবত if Falseএটি এমন কোনও দ্বারা সুরক্ষিত হয়েছে যাতে এটি কার্যকর হয় না (স্থির কোড-বিশ্লেষণ কেবল যা দেখবে তা রানটাইম তথ্য নয় - আপনি যদি করেন তবে সেই মডিউলটি নিজেই খোলেন, আপনার কাছে এমন কোনও ইঙ্গিত নেই যা প্রধান প্রত্যাশিত ছিল)।

এটি কাটিয়ে উঠতে কিছু পছন্দ আছে:

  1. যদি এটি কোনও বাহ্যিক মডিউল হয় তবে এটির সাথে এটি যুক্ত করা সম্ভব হবে forced builtinsযাতে রানটাইম তথ্য পাওয়ার জন্য পাইডিভ এটির জন্য একটি শেল তৈরি করে ( বিশদটির জন্য http://pydev.org/manual_101_interpreter.html দেখুন) - যেমন: বেশিরভাগ ক্ষেত্রে পাইডেভ একটি শেল মধ্যে মডিউল আমদানি এবং না dir(module)এবং dirবর্তমান সম্পূর্ণকরণ এবং করতে কোড বিশ্লেষণ মডিউল পাওয়া শ্রেণীর উপর।

  2. আপনি ত্রুটিযুক্ত একটি লাইনে Ctrl + 1 (ম্যাকের জন্য সিএমডি + 1) ব্যবহার করতে পারেন এবং পাইডেভ আপনাকে সেই ত্রুটিটিকে উপেক্ষা করার জন্য একটি মন্তব্য যুক্ত করার জন্য একটি বিকল্প উপস্থাপন করবে।

  3. একটি stubমডিউল তৈরি করা এবং এটির পরিপূরণগুলিতে যুক্ত করা সম্ভব predefined( http://pydev.org/manual_101_interpreter.html এরও বিশদ রয়েছে)।


1
কখনও কখনও বাধ্য builtins করার জন্য একটি মডিউল যোগ করে সাহায্যের না (উদাহরণস্বরূপ এই বাগ দেখুন, sourceforge.net/tracker/... )
বরিস Gorelik

@ ফ্যাবিও: পূর্বনির্ধারিত পরিসমাপ্তিগুলি সম্পর্কে তারা এখানে কী ব্যবহার করতে পারে? এবং আপনি যদি এমন কিছু করেন তবে কোন বিকল্প নেই try: import a; except: a=mockModuleমন্তব্যগুলি ছাড়াই এগুলি দমন করার কোনও উপায় আছে?
টেড

8
আমি সিটিআরএল -১ চেষ্টা করেছিলাম এটি আমাকে '@ সংজ্ঞাযুক্ত পরিবর্তনশীল' দেয় যা একটি বীজ যোগ করে এবং এটি কাজ করে। ধন্যবাদ।
রিচমিস্টার

সর্বশেষগ্রহণ এবং পাইডেভের সাথে আমি একই সমস্যাটি অনুভব করছি। আমি সমস্ত মডিউলগুলির মধ্যে নেভিগেট করতে পারি, তাহলে কোড-বিশ্লেষণ কেন একই রকম করতে পারে না?
আদম

3
আপনি চূড়ান্ত করার আগে, ডিরেক্টরিটি পাইথনপথে রয়েছে তা নিশ্চিত করুন, তারপরেই পুনরায় চালু / পুনরায় সূচনা করুন , প্রকল্প> পাইদেব> ত্রুটি চিহ্নিতকারীগুলি সরান , এবং নম্পি এখন ফোর্সড বিল্টিনগুলিতে উপস্থিত হওয়া উচিত।
smci

49

আমি ওপেনসিভি ব্যবহার করছি যা বাইনারি ইত্যাদির উপর নির্ভর করে তাই আমার স্ক্রিপ্ট রয়েছে যেখানে প্রতিটি অন্যান্য লাইনে এই নির্বোধ ত্রুটি রয়েছে। পাইথন একটি গতিশীল ভাষা তাই এই জাতীয় অনুষ্ঠানের ত্রুটি হিসাবে বিবেচনা করা উচিত নয়।

আমি এই ত্রুটিগুলি এখানে গিয়ে পুরোপুরি সরিয়েছি:

উইন্ডো -> পছন্দসমূহ -> পাইডেভ -> সম্পাদক -> কোড বিশ্লেষণ -> অপরিজ্ঞাত -> আমদানি থেকে অপরিবর্তিত পরিবর্তনীয় -> উপেক্ষা করুন

এবং এটি।

এটি হতে পারে, উইন্ডো -> পছন্দসমূহ -> পাইডেভ -> সম্পাদক -> কোড বিশ্লেষণ -> আমদানি -> আমদানি পাওয়া যায় নি -> উপেক্ষা করুন


8
এর জন্য ধন্যবাদ. এটা সহজ এবং সহজ। যাইহোক, "আমদানি পাওয়া যায়নি" সেটিংসটিকে "উপেক্ষা করুন" এ পরিবর্তনের পরিবর্তে, আমি এটিকে "সতর্কতা" হিসাবে পরিবর্তন করেছি। এখন কিছুই দেখায় না। :) আশা করি, আমার যদি সত্যিকারের আমদানি সমস্যা হয় তবে আমি একটি সতর্কতা পেয়ে যাব।
প্রেম এবং শান্তি - জো কোডসওয়েল

1
পরিবর্তনগুলি কার্যকর করতে Eclipse পুনরায় চালু করতে হয়েছিল।
স্পেটেকাকা

21

উত্তর হিসাবে চিহ্নিত পোস্টটি কোনও সমাধান নয়, বরং একটি কর্মপরিকল্পনা দেয়।

এই সমাধানটি আমার পক্ষে কাজ করে:

  • যাও Window - Preferences - PyDev - Interpreters - Python Interpreter
  • Forced builtinsট্যাবে যান
  • ক্লিক করুন New...
  • মডিউলের নাম টাইপ করুন ( multiprocessingআমার ক্ষেত্রে) এবং ক্লিক করুনOK

ত্রুটি বার্তাগুলি কেবল অদৃশ্য হবে না, মডিউল সদস্যরাও স্বীকৃত হবে।


1
পাইডেভের বিকাশকারী দ্বারা "উত্তর হিসাবে চিহ্নিত চিহ্নিত" লেখাটি বিবেচনা করে, আপনার সম্ভবত এটি অন্য নজর দেওয়া উচিত। তিনি পোস্টে নিজেই সুস্পষ্ট নির্দেশনা দেন না কারণ তিনি আপনার নির্দিষ্ট নির্দেশাবলীর সাথে লিঙ্ক করেছেন।
coredumperror

5
@ কোরডাম্পআরর আমার পোষ্ট নেই যে কে পোস্ট করেছে। পোস্টটি যা বর্ণনা করে তা আমি চেষ্টা করেছিলাম, এবং এটি কার্যকর হয় তবে এটি সমাধান নয়, একটি কর্মপরিকল্পক। আমি যা বর্ণনা করি তা অন্য কম্পিউটারের জন্য কাজ না করে তবে আমার পক্ষে কাজ করে এবং এটিই সঠিক সমাধান। যদি অন্য পোস্টটি বর্ণনার পরিবর্তে সমাধানের সাথে লিঙ্ক করে, তবে এটি নির্দেশিকাগুলি অনুসরণ করে না, আমি আমার পক্ষে ভাল সমাধান কী তা বর্ণনা করে নির্দেশিকাগুলি অনুসরণ করেছি, এই আশায় যে এটি অন্যদের সহায়তা করবে।
স্টেনসি

2
@ ইসাক এখন এটি করে, আমি আমার উত্তরটি সম্পাদনার আগে পোস্ট করেছিলাম।
স্টেনসি

হ্যাঁ, এটি আরও ভাল এবং ক্লিনার সমাধান! এটি মাস্কিং বা লুকানোর পরিবর্তে বৈধতা ঠিক করে। আমি যোগ করতে ছিল reকিন্তু একবার আমি ভালো জিনিস জন্য কোন লাল কালি করেনিre.M
Bostone

10

আমি একটি Eclipse / পাইডেভ প্রকল্পের সাথে একই ধরণের সমস্যা ছিল। এই প্রকল্পে পাইথন কোডের মূল ডিরেক্টরিটি ছিল প্রকল্পের একটি উপ ডিরেক্টরি।

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test

যখন প্রকল্পটি ডিবাগ করা হয়েছিল বা চালানো হয়েছিল সবকিছু ঠিকঠাক ছিল কারণ কার্যকারী ডিরেক্টরিটি সঠিক জায়গায় সেট করা হয়েছিল। তবে পিডিএভ কোড বিশ্লেষণটি মডিউল 1 বা মডিউল 2 থেকে কোনও আমদানি খুঁজে পেতে ব্যর্থ হয়েছিল।

সমাধানটি প্রকল্পের বৈশিষ্ট্যগুলি -> পাইডেভ - পাইথনপ্যাথ বিভাগটি সম্পাদনা করে এবং উত্স ফোল্ডার ট্যাব থেকে / মাইপ্রজেক্টটি সরিয়ে তার পরিবর্তে / মাইপ্রজেক্ট / এসসিআর যুক্ত করতে হবে।


এটি যাচাই করতে চেয়েছিল যে এটি আসলে পুরোপুরি কার্যকর হয়।
আমনদীপ 7

হ্যাঁ, কেবল প্রধান মেনুতে প্রজেক্ট / প্রোপার্টি / পাইডেভ - পাইথনপথে যান এবং অ্যাপটির জন্য প্রয়োজনীয় সমস্ত পাথ যুক্ত করেছেন, যা সমস্যার সমাধান করেছে!
Kostyantyn

6

এটি আমার পক্ষে কাজ করেছে:

পদক্ষেপ 1) দোভাষী মুছে ফেলা, আবার এটি স্বয়ংক্রিয়ভাবে কনফিগার করা

পদক্ষেপ 2) উইন্ডো - পছন্দসমূহ - পাইডেভ - দোভাষী - পাইথন ইন্টারপ্রেটার ফোর্সড বিল্টিনস ট্যাবে যান নিউ ক্লিক করুন ... মডিউলটির নাম টাইপ করুন (আমার ক্ষেত্রে অভিশাপ) এবং ঠিক আছে ক্লিক করুন

পদক্ষেপ 3) যে কোনও মডিউল ত্রুটি দিচ্ছে তাতে প্রকল্পের এক্সপ্লোরারটিতে ডান ক্লিক করুন। পাইডেভ-> কোড বিশ্লেষণে যান।


আমার পক্ষেও কাজ করেছেন, বর্তমানে গৃহীত উত্তরের চেয়ে প্রতিটি পদক্ষেপকে আরও স্পষ্ট করে দেওয়ার জন্য ধন্যবাদ।
sc28

1

আমারও একই সমস্যা ছিল। আমি উইন্ডোজটিতে পাইথন এবং এক্সলিপ ব্যবহার করছি। কোডটি ঠিকঠাক চলছিল, তবে গ্রহপটি সমস্ত জায়গায় ত্রুটি দেখায়। আমি 'Lib' ফোল্ডারের নাম পরিবর্তন করে 'lib' (সি: \ পাইথন 27 \ lib) করার পরে, সমস্যার সমাধান হয়েছিল। দেখে মনে হচ্ছে যে অক্ষরগুলির মূলধনটি কনফিগারেশন ফাইলের সাথে মেলে না, এটি কখনও কখনও সমস্যার সৃষ্টি করবে (তবে এটি সর্বদাই মনে হয় না, কারণ সমস্যাগুলি হঠাৎ প্রকাশ না হওয়ার আগে ত্রুটি পরীক্ষা করা দীর্ঘ সময় ধরে ঠিক ছিল) কারণ)।


4
এটি অ্যালিপ্সের প্রিয় বিনোদন। ত্রুটিযুক্ত পতাকাগুলি হঠাৎ অকারণে প্রদর্শিত হবে। এটি মানুষকে ভেবে পাগল করে তোলে যে তারা বিশ্বকে ভেঙে দিয়েছে, ব্যতীত কিছু অযৌক্তিক ত্রুটিযুক্ত পতাকা ব্যতীত যে উপগ্রহটি হঠাৎ মজা এবং লাভ (?) এর জন্য এলোমেলোভাবে প্রয়োগের সিদ্ধান্ত নিয়েছে
আর থিয়েড

আমি এটি চেষ্টা করে দেখেছি এবং মনে হয়েছে এটি কাজ করেছে, তবে এটি কেবল একটি রীতি ছিল , তবে এটি> 5 মিনিট নিয়েছে, তাই আমি পূর্বাবস্থায় ফেরাতে পারি না। তবে @ ফ্যাবিও জাদরোজনি সিটিআরএল -১ @ সংজ্ঞায়িত পরিবর্তনশীল নিখুঁতভাবে কাজ করেছে এবং এটি 5 মিনিটের পরেও কাজ চালিয়ে যাচ্ছে!
মার্ক মিকোফস্কি

1

আমি যা করছিলাম তার একটি অনুমান:

import module.submodule

class MyClass:
    constant = submodule.constant

যা পাইলট বলেছেন: E: 4,15: Undefined variable 'submodule' (undefined-variable)

আমি আমার আমদানি পরিবর্তন করে এটি সমাধান করেছি:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

দ্রষ্টব্য: আমি স্থির প্রকৃতির প্রতিবিম্বিত করতে বড় হাতের নাম রাখতে আমদানিকৃত ভেরিয়েবলেরও নামকরণ করেছি।


0

এটি সম্ভব আপনার কেবল একটিগ্রহের মধ্যে আপনার অজগর পথটি পুনরায় কনফিগার করতে হবে। একই প্রশ্নের আমার উত্তর দেখুন See


0

পছন্দগুলিতে -> পাইডেভ -> পাইলিন্টে পাস করার জন্য যুক্তির আওতায় পাইলিন্ট এই লাইনটি যুক্ত করুন:

--generated-members=objects

প্রতিটি উত্পন্ন জন্য আপনার এটি করতে হবে। আমি গুগল করে এটি পেয়েছি, তবে আমি রেফারেন্সটি হারিয়েছি।


0

যে কোনও মডিউল ত্রুটি দিচ্ছে তাতে প্রকল্প এক্সপ্লোরারটিতে ডান ক্লিক করুন। পাইডেভ-> ত্রুটি চিহ্নিতকারীদের সরান।


0

আমার উত্তরটি নতুন কিছু অবদান রাখে না, কেবল একটি দৃ concrete় উদাহরণ আমি সম্মুখীন হয়েছি।

import gtk.gdk

w = gtk.gdk.get_default_root_window()

পাইডেভ ত্রুটি বার্তাটি দেখিয়েছে "আমদানি থেকে অপরিজ্ঞাত পরিবর্তনশীল: get_default_root_window ()"

পাইথন শেলটিতে আপনি দেখতে পাবেন যে এটি একটি 'বিল্ট-ইন' মডিউল যা উপরের উত্তরে উল্লিখিত হয়েছে:

>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>

উইন্ডো-> পছন্দসমূহ-> পাইডিভ-> দোভাষী-> পাইথন ইন্টারপ্রেটারের অধীনে, আমি 'ফোর্সড বিল্টিনস' ট্যাবটি নির্বাচন করেছি এবং তালিকায় 'gtk.gdk' যুক্ত করেছি।

এখন ত্রুটি বার্তাটি আর প্রদর্শিত হয়নি।


0

আমি দেখতে পাই যে এই 2 টি পদক্ষেপ আমার জন্য সর্বদা কাজ করে:

  1. মডিউলটির মূল ফোল্ডারটি পাইথনপথে নিশ্চিত করুন (অন্য যুক্ত করুন)।
  2. জোরপূর্ন বিল্টিনগুলিতে মডিউলটির পুরো নাম যুক্ত করুন।

এখানে নোট করার বিষয়গুলি:

  • কিছু জনপ্রিয় মডিউলগুলি একই পিতা বা মাতা বা সন্তানের জুটির সাথে ইনস্টল করে। এই ক্ষেত্রে আপনাকে সেই পিতামাতাকে পাইথনপথে যোগ করতে হবে, তার পিতামহী ফোল্ডারের পাশাপাশি, আপনি ইতিমধ্যে সমস্ত কিছুর জন্য নিশ্চিত / যুক্ত করেছেন।

  • বাধ্যতামূলক বিল্টিনগুলিতে যুক্ত করার সময় (উদাহরণস্বরূপ) "google.appengine.api.memcache" ব্যবহার করুন, কেবল "মেমক্যাচ" নয়, যেখানে এই উদাহরণে "গুগল", পাইথনপ্যাথে সংজ্ঞায়িত ফোল্ডারের তাত্ক্ষণিক শিশু।


আমি কীভাবে lib.site-প্যাকেজ যুক্ত করতে পারি__পরিচালিত বিল্টিনগুলিতে দ্রুততম ... এটি '-' প্রতীকটি গ্রহণ করছে না ... আমি কনফিগার মডিউলে আমদানি সমস্যা নিয়ে আসছি এবং আপনার প্রতিকার করার চেষ্টা করছি, দয়া করে সহায়তা করুন
উদ্যোগ

0

আপনি যদি নিশ্চিত হন যে আপনার স্ক্রিপ্টটি চলমান এবং এটি একটি মিথ্যা বিপদাশঙ্কা, পছন্দগুলি> পাইডেভ> সম্পাদক> কোড বিশ্লেষণে যান। ত্রুটিগুলি সতর্কবাণীতে স্থানান্তর করুন।

এখানে চিত্র বর্ণনা লিখুন

http://www.pydev.org/manual_adv_code_analysis.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.