'ননটাইপ' অবজেক্টটি কী?


89

আমার অজগর স্ক্রিপ্টটি চালানোর সময় আমি এই ত্রুটিটি পাচ্ছি:

TypeError: cannot concatenate 'str' and 'NoneType' objects

আমি নিশ্চিত যে 'আরআর' এর অর্থ স্ট্রিং, তবে 'ননটাইপ' অবজেক্টটি কী তা আমি জানি না। আমার স্ক্রিপ্টটি দ্বিতীয় লাইনে ছড়িয়ে পড়ে, আমি জানি প্রথমটি কাজ করে কারণ because লাইন থেকে প্রাপ্ত কমান্ডগুলি আমার আশায় রয়েছে যেমনটি আমি আশা করব। প্রথমে আমি ভেবেছিলাম এটি হতে পারে কারণ আমি সেন্ড কম্যান্ডের ভিতরে ভেরিয়েবল এবং ব্যবহারকারী ইনপুট ব্যবহার করছি।

'সিএপিএস' এর সমস্ত কিছু পরিবর্তনশীল, 'লোয়ার কেস'-এ থাকা সমস্ত কিছুই' পার্সার.এডিডি_অপশন 'বিকল্পগুলির ইনপুট।

আমি pexpect ব্যবহার করছি, এবং optparse

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)

4
আমাদের আরও কোড এবং ইনপুটটি দেখতে হবে - NoNyTyoe এর অর্থ হল যে কোনও ভেরিয়েবল সেট করা হয়নি
mmmmmm

4
NoneTypeএকক মানের ধরণ None। আপনার মানগুলির মধ্যে একটি স্ট্রিং নয়।
মার্টিজন পিটারস

কুইক অ্যান্ড ডার্টি: str()স্ট্র (এসএনএমপিএসআরভিউএসআরসিএমডি) + স্টার (স্নিম্পিউজার) + তে প্রতিটি পদ যুক্ত করুন ...
পিটারএমএম

4
@ পিটারএমএমএম এটি একটি ভয়ানক ধারণা - সমস্যাটি কেবল নিজেরাই প্রকাশ পাবে (সম্ভবত আরও খারাপ) এই লাইনের আরও নিচে। এটা তোলে ভালো হতে জিনিসটা হবে কেন ভেরিয়েবল এক কোনটি দিয়ে শুরু হয়।
আরশাজী

উত্তর:


83

NoneTypeNoneঅবজেক্টের জন্য টাইপ , যা কোনও বস্তু যা কোনও মান নির্দেশ করে নাNoneফাংশনগুলির রিটার্ন মান যা "কিছু ফেরত দেয় না"। এটি ফাংশনগুলির জন্য একটি সাধারণ ডিফল্ট রিটার্ন মান যা কোনও কিছুর সন্ধান করে এবং এটি খুঁজে পেতে বা নাও পেতে পারে; উদাহরণস্বরূপ, re.searchযখন রেজেক্সের সাথে মেলে না, বা dict.getকীটির ডিকটিতে কোনও প্রবেশ নেই তখন এটি ফিরে আসবে । আপনি যোগ করতে পারবেন নাNone স্ট্রিং বা অন্যান্য অবজেক্টগুলিতে করতে ।

আপনার ভেরিয়েবলগুলির মধ্যে Noneএকটি হল স্ট্রিং নয়। হতে পারে আপনি নিজের returnকোনও কার্যক্রমে ভুলে গেছেন , অথবা ব্যবহারকারী কোনও কমান্ড-লাইন বিকল্প সরবরাহ না করে optparseআপনাকে Noneসেই বিকল্পটির মান দেওয়ার জন্য দিয়েছে । আপনি যখন Noneকোনও স্ট্রিংয়ে যুক্ত করার চেষ্টা করেন , আপনি সেই ব্যতিক্রমটি পান:

send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)

এক groupবা SNMPGROUPCMDবা V3PRIVCMDহয়েছে Noneএর মান হিসাবে।


ধন্যবাদ !! আপনি যেখানে সঠিক, আমার কোনও ইউজার ইনপুট বিকল্প কোনও কারণে নিচ্ছে না। আমি এটিকে একটি "বনাম" বনাম একটি বিকল্প এবং বুম হিসাবে যুক্ত করেছি, এটি কার্যকর হয়েছে। এখন আমাকে কেবল এটি অনুসন্ধান করতে হবে কেন এটি বিকল্প হিসাবে সঠিকভাবে গ্রহণ করছে না, অন্যান্য সমস্ত অপশন ভাল কাজ করছে working
নিরাপত্তাহীন-IT

4
"সেট করা নেই" কিছুটা অস্পষ্ট ... যদি কোনও ভেরিয়েবল সংজ্ঞায়িত না হয় এবং আপনি এটির সাথে কিছু অপারেশন করার চেষ্টা করেন তবে আপনার একটি পাওয়া উচিত NameError। এটিও সেট করা যেতে পারে তবে সমান None("কিছুই সেট না করে" = "সেট না করা"?), তবে আপনি কিছু পেতে পারেন TypeError
নিক টি

মূলত (এখানে সি / জাভা ভাবেনদের জন্য) কিছুই নেই = নাল
জো

24

NoneTypeকেবল Noneসিঙ্গলটনের ধরণ :

>>> type(None)
<type 'NoneType'>

উপরের লিঙ্কটি থেকে:

None

টাইপ একমাত্র মান NoneTypeNoneযখন কোনও ফাংশনে ডিফল্ট আর্গুমেন্টগুলি পাস না করা হয় তখন প্রায়শই কোনও মানের অভাবে প্রতিনিধিত্ব করতে ব্যবহৃত হয়। অ্যাসাইনমেন্ট Noneঅবৈধ এবং উত্থাপন a SyntaxError

আপনার ক্ষেত্রে, দেখে মনে হচ্ছে আপনি যে আইটেমগুলিকে একত্রিত করার চেষ্টা করছেন তার মধ্যে একটি হ'ল Noneতাই আপনার ত্রুটি।


21

ডিফেন্সিভ প্রোগ্রামিংয়ের স্বার্থে, ব্যবহার করার আগে অবাস্তব জিনিসগুলির নালার বিরুদ্ধে পরীক্ষা করা উচিত।

if obj is None:

বা

if obj is not None:

4
"এটি" কেবলমাত্র আপনার প্রয়োজন হলে ব্যবহার করা উচিত। সর্বোত্তম প্রতিরক্ষামূলক প্রোগ্রামিং হ'ল পরীক্ষা, প্রচুর পরীক্ষা।
জারজেন এ। এয়ারহার্ড

4
ডিফেন্সিভ প্রোগ্রামিং সবচেয়ে খারাপ জিনিসগুলির মধ্যে একটি। যদি আপনি এর মতো কোনও ত্রুটি খুঁজে পান তবে এর অর্থ আপনি একটি ভুল প্রোগ্রামিং করেছেন। "ব্যবহারের আগে নাল পরীক্ষা করা" এর মতো স্টাফ কেবল কিছু গুরুতর ত্রুটি লুকায়। আপনি ব্যতিক্রম নিক্ষেপ করা উচিত। এবং প্রোগ্রামারদের কিছু কাস্টম ব্যতিক্রম নিক্ষেপ করবেন না, এটি সত্যই জটিল। প্রাকৃতিক ত্রুটি নিক্ষেপ করা যাক। আসলে, রক্ষণাত্মক প্রোগ্রামিং এমন একটি লক্ষণ যা আপনার অন্য ভাষা ব্যবহার করা উচিত।
bzim

4
আমি sqlAlchemy মাধ্যমে ডেটাবেস জিজ্ঞাসা। ফলাফল নেই। প্রত্যাবর্তিত বস্তু কিছুই নয়। যার অর্থ কোনও ফল নেই। কোন ত্রুটি নেই। ফলাফল চূড়ান্ত হয় কিনা তা আপনি পরীক্ষা করে দেখুন, ফলাফলটি অবজেক্টটি ব্যবহার করেন। এটি সম্পর্কে খারাপ কিছু না। প্রোগ্রামিং সম্পর্কে সবচেয়ে খারাপ জিনিস হ'ল ডগম্যাটিজম।
একতা 100

17

এর অর্থ আপনি কোনও স্ট্রিংকে এমন কিছু দিয়ে যুক্ত করতে চেষ্টা করছেন None

পাইথনের "নাল" কোনওটিই নয় এবং NoneType এটির ধরণ।

এই কোডটি একই ধরণের ত্রুটি বাড়িয়ে তুলবে:

>>> bar = "something"
>>> foo = None
>>> print foo + bar
TypeError: cannot concatenate 'str' and 'NoneType' objects


2

ত্রুটি বার্তায়, আপনাকে দুটি স্ট্রোকের মান (একটি স্ট্রিং এবং Noneএই উদাহরণে) দেখিয়ে আপনি একত্রিত করতে পারবেন না তার পরিবর্তে পাইথন ইন্টারপ্রেটার আপনাকে যে বিষয়গুলির সাথে যুক্ত করার চেষ্টা করেছেন তার ধরণগুলি দেখিয়ে এটি আপনাকে বলে। strএকক Noneদৃষ্টান্তের ধরণের সময় বলা হয় এমন প্রতিটি স্ট্রিংয়ের ধরণNoneType

আপনার সাধারণত নিজেকে নিয়ে উদ্বেগের প্রয়োজন হয় না NoneType, তবে এই উদাহরণে এটি জানা দরকার type(None) == NoneType


আমার খুব অনুরূপ সমস্যা আছে এবং এটি আবিষ্কার করার চেষ্টা করছি যে বিষয়টিটি ননটাইপ নয়, আপনার স্বীকৃতি আমার পক্ষে কাজ করে না: >>> type(key) <type 'NoneType'> >>> type(key) == NoneType Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'NoneType' is not defined
রুবাইক

4
@ আরবিআইসিকে NoneTypeকোথাও সংজ্ঞায়িত করা হয়নি (যা আমি অবগত)। আপনি যদি মানটি কিনা তা যাচাই করতে চান তবে Noneকেবল ব্যবহার করুন key is None( স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসা / ২৩০৮63838383৩/২ দেখুন )। অন্যথায় আপনি type(key) == type(None)একই প্রভাব ব্যবহার করতে পারে ।
ফিউমুরমেল

1

আপনার ত্রুটি এরকম কিছু কারণে ঘটছে: >>>
>>> None + "hello world"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

পাইথনের নন অবজেক্ট অন্য ভাষার কাছে নাল , শূন্যপদ ইত্যাদির সমান ।


0

ভেরিয়েবলগুলির মধ্যে একটিরও কোনও মান দেওয়া হয়নি, সুতরাং এটি ননটাইপ। এটি কেন আপনার তা খতিয়ে দেখতে হবে এটি সম্ভবত আপনার পক্ষে একটি সাধারণ লজিক ত্রুটি।


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