คำชี้แจงปัญหา − ใช้ไลบรารี boto3 ใน Python เพื่อตรวจสอบว่าไม่มีคีย์ในบัคเก็ตหรือไม่ โดยใช้ฟังก์ชันบริกร ตัวอย่างเช่น ใช้บริกรเพื่อตรวจสอบว่าไม่มีคีย์ test1.zip ใน Bucket_1 หรือไม่
แนวทาง/อัลกอริทึมในการแก้ปัญหานี้
ขั้นตอนที่ 1 - นำเข้าข้อยกเว้น boto3 และ botocore เพื่อจัดการกับข้อยกเว้น
ขั้นตอนที่ 2 − bucket_name และ key เป็นสองพารามิเตอร์ในฟังก์ชัน
ขั้นตอนที่ 3 − สร้างเซสชัน AWS โดยใช้ไลบรารี boto3
ขั้นตอนที่ 4 − สร้างไคลเอนต์ AWS สำหรับ S3
ขั้นตอนที่ 5 − ตอนนี้สร้างวัตถุรอสำหรับ object_not_exists โดยใช้ฟังก์ชัน get_waiter
ขั้นตอนที่ 6 − ตอนนี้ ใช้อ็อบเจกต์ wait เพื่อตรวจสอบว่าไม่มีคีย์ในบัคเก็ตที่ระบุหรือไม่ โดยค่าเริ่มต้น ระบบจะตรวจสอบทุกๆ 5 วินาทีจนกว่าจะถึงสถานะสำเร็จ ข้อผิดพลาดถูกส่งกลับหลังจาก 20 ตรวจสอบล้มเหลว อย่างไรก็ตาม ผู้ใช้สามารถกำหนดเวลาการสำรวจและความพยายามสูงสุดได้
ขั้นตอนที่ 7 − ส่งคืน None
ขั้นตอนที่ 8 − จัดการข้อยกเว้นทั่วไปหากมีข้อผิดพลาดขณะตรวจสอบที่ฝากข้อมูล
ตัวอย่าง
ใช้รหัสต่อไปนี้เพื่อใช้ waiter เพื่อตรวจสอบว่ามีกุญแจอยู่ในที่ฝากข้อมูลหรือไม่ -
import boto3 from botocore.exceptions import ClientError def use_waiters_check_object_not_exists(bucket_name, key_name): session = boto3.session.Session() s3_client = session.client('s3') try: waiter = s3_client.get_waiter('object_not_exists') waiter.wait(Bucket=bucket_name, Key = key_name, WaiterConfig={ 'Delay': 2, 'MaxAttempts': 5}) print('Object does not exist: ' + bucket_name +'/'+key_name) except ClientError as e: raise Exception( "boto3 client error in use_waiters_check_object_not_exists: " + e.__str__()) except Exception as e: raise Exception( "Unexpected error in use_waiters_check_object_not_exists: " + e.__str__()) print(use_waiters_check_object_exists("Bucket_1","testfolder/test1.zip")) print(use_waiters_check_object_exists("Bucket_1","testfolder/test.zip"))
ผลลัพธ์
Object does not exist: Bucket_1/testfolder/test1.zip None botocore.exceptions.WaiterError: Waiter ObjectNotExists failed: Max attempts exceeded "Unexpected error in use_waiters_check_object_not_exists: " + e.__str__()) Exception: Unexpected error in use_waiters_check_object_not_exists: Waiter ObjectNotExists failed: Max attempts exceed
สำหรับ Bucket_1/testfolder/test1.zip ผลลัพธ์คือคำสั่งพิมพ์และไม่มี เนื่องจากไม่มีการตอบกลับใดๆ จึงพิมพ์ว่าไม่มี
สำหรับ Bucket_1/testfolder/test.zip ผลลัพธ์จะเป็นข้อยกเว้นเนื่องจากมีอ็อบเจ็กต์นี้อยู่
ยกเว้น สามารถอ่านได้ว่าความพยายามสูงสุดเกิน