ไปข้างหน้าและใช้isinstance
ถ้าคุณต้องการ มันค่อนข้างชั่วร้ายเนื่องจากไม่รวมลำดับที่กำหนดเองตัววนซ้ำและสิ่งอื่น ๆ ที่คุณอาจต้องการ อย่างไรก็ตามบางครั้งคุณต้องประพฤติตัวแตกต่างกันหากมีคนส่งสตริง การตั้งค่าของฉันจะมีการตรวจสอบอย่างชัดเจนstr
หรือunicode
ชอบ:
import types
isinstance(var, types.StringTypes)
NB ไม่ผิดสำหรับtypes.StringType
types.StringTypes
หลังรวมstr
และunicode
วัตถุ
types
โมดูลจะพิจารณาโดยมากจะเป็นล้าสมัยในความโปรดปรานของเพียงแค่การตรวจสอบโดยตรงกับประเภทของวัตถุดังนั้นหากคุณไม่ต้องการใช้ข้างต้นคุณสามารถเลือกตรวจสอบอย่างชัดเจนกับstr
และunicode
เช่นนี้
isinstance(var, (str, unicode)):
แก้ไข:
ยังดีกว่า:
isinstance(var, basestring)
สิ้นสุดการแก้ไข
หลังจากสิ่งเหล่านี้อย่างใดอย่างหนึ่งคุณสามารถถอยกลับไปทำตัวราวกับว่าคุณได้รับลำดับปกติโดยการให้ลำดับที่ไม่ใช่ข้อผิดพลาดนั้นทำให้เกิดข้อยกเว้นที่เหมาะสม
ดูสิ่งที่ "ชั่วร้าย" เกี่ยวกับการตรวจสอบชนิดไม่ใช่ว่าคุณอาจต้องการทำงานแตกต่างกันสำหรับวัตถุบางชนิดมันเป็นสิ่งที่คุณ จำกัด การทำงานของคุณจากการทำสิ่งที่ถูกต้องด้วยวัตถุประเภทที่ไม่คาดคิดที่จะทำสิ่งที่ถูกต้อง หากคุณมีทางเลือกสุดท้ายที่ไม่ได้ตรวจสอบประเภทคุณจะลบข้อ จำกัด นี้ ควรสังเกตว่าการตรวจสอบประเภทมากเกินไปเป็นกลิ่นรหัสที่บ่งชี้ว่าคุณอาจต้องการทำการปรับโครงสร้างบางอย่าง แต่นั่นไม่ได้หมายความว่าคุณควรหลีกเลี่ยงจากการถูกดักฟัง