পাইথন প্রোগ্রামাররা часто কিছু সাধারণ ভুল বা 'গচা' (gotchas) করেন। নিচে সেগুলোর তালিকা এবং সমাধান দেওয়া হলো:
১. স্কোপ নেম লুকআপ (LEGB Rule)
পাইথন Local → Enclosing → Global → Built-in অর্ডারে ভেরিয়েবল খুঁজে। আউটার স্কোপের ভেরিয়েবল অনবহddingে রি-অ্যাসাইন করলে বাগ হতে পারে।
২. is এবং == পার্থক্য না জানা
is: মেমরি আইডেন্টিটি চেক (একই অবজেক্ট কিনা)==: ভ্যালু ইকুয়ালিটি চেক (__eq__মেথড)
৩. লুপ চলাকালীন লিস্ট মডিফাই করা
ইটারেশন চলাকালীন এলিমেন্ট রিমুভ করলে IndexError হয় কারণ লিস্ট ছোট হয় কিন্তু ইন্ডেক্স কমে না।
সমাধান: লিস্ট কম্প্রিহেনশন, filter(), বা রিভার্স লুপ ব্যবহার করুন।
৪. ক্লোজার বাইন্ডিং (Late Binding)
lambdas = [lambda x: i + x for i in range(5)]
for f in lambdas:
print(f(10)) # আউটপুট: 14, 14, 14, 14, 14
# সমাধান
lambdas = [lambda x, i=i: i + x for i in range(5)]
# আউটপুট: 10, 11, 12, 13, 14
সব ল্যাম্বডা একই i ভেরিয়েবল রেফার করে, লুপ শেষে i=4 থাকে।
৫. বিল্ট-ইন নেমের সাথে ক্ল্যাশ
sum = 10 লেখলে বিল্ট-ইন sum() ফাংশন ওভাররাইড হয়। প্যাকেজ নামেও এটা সমস্যা তৈরি করে।
৬. অপারেটর ওভারলোডিং-এ অনイントুইটিভ ইমপ্লিমেন্টেশন
কাস্টম ক্লাসে অপারেটর ওভাররাইড করলে স্ট্যান্ডার্ড আচরণ রক্ষা করুন, অন্যথায় API জটিল হয়।