6
ใช้ eval python () กับ ast.literal_eval () หรือไม่
ฉันมีสถานการณ์ที่มีรหัสบางอย่างที่eval()เกิดขึ้นเป็นวิธีแก้ปัญหาที่เป็นไปได้ ตอนนี้ฉันไม่เคยใช้eval()มาก่อน แต่ฉันได้เจอข้อมูลมากมายเกี่ยวกับอันตรายที่อาจเกิดขึ้นได้ ที่กล่าวว่าฉันระมัดระวังมากเกี่ยวกับการใช้มัน สถานการณ์ของฉันคือฉันมีอินพุตที่ได้รับจากผู้ใช้: datamap = raw_input('Provide some data here: ') ในกรณีที่datamapความต้องการที่จะเป็นพจนานุกรม ฉันค้นหาไปรอบ ๆ และพบว่าeval()สามารถแก้ไขปัญหานี้ได้ ฉันคิดว่าฉันอาจสามารถตรวจสอบชนิดของอินพุตก่อนที่จะพยายามใช้ข้อมูลและนั่นจะเป็นการป้องกันความปลอดภัยที่ทำงานได้ datamap = eval(raw_input('Provide some data here: ') if not isinstance(datamap, dict): return ฉันอ่านเอกสารและฉันยังไม่ชัดเจนว่าจะปลอดภัยหรือไม่ Eval ประเมินข้อมูลทันทีที่ป้อนหรือหลังจากdatamapเรียกตัวแปรหรือไม่ เป็นastโมดูล.literal_eval()ตัวเลือกที่ปลอดภัยเท่านั้น?