การปฏิเสธใน Python


162

ฉันกำลังพยายามสร้างไดเรกทอรีหากเส้นทางไม่มีอยู่ แต่! ผู้ประกอบการ (ไม่) ไม่ทำงาน ฉันไม่แน่ใจว่าจะลบล้าง Python ได้อย่างไร ... วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

if (!os.path.exists("/usr/share/sounds/blues")):
        proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
        proc.wait()

19
อย่างไรก็ตามทำไมไม่ใช้ Python os.mkdir()ล่ะ?
Neil

1
ฉันไม่ทราบถึงฟังก์ชั่น os.mkdir () ถึงแม้ว่าฉันจะคิดว่ามีบางอย่างเช่นนั้น
David Mulder

คำตอบ:


229

notผู้ประกอบการปฏิเสธในหลามเป็น ดังนั้นเพียงแค่เปลี่ยนของคุณด้วย!not

สำหรับตัวอย่างของคุณทำสิ่งนี้:

if not os.path.exists("/usr/share/sounds/blues") :
    proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
    proc.wait()

สำหรับตัวอย่างเฉพาะของคุณ (ดังนีลที่กล่าวไว้ในความคิดเห็น) คุณไม่จำเป็นต้องใช้subprocessโมดูลคุณสามารถใช้os.mkdir()เพื่อให้ได้ผลลัพธ์ที่คุณต้องการโดยมีข้อยกเว้นเพิ่มเติมในการจัดการความดี

ตัวอย่าง:

blues_sounds_path = "/usr/share/sounds/blues"
if not os.path.exists(blues_sounds_path):
    try:
        os.mkdir(blues_sounds_path)
    except OSError:
        # Handle the case where the directory could not be created.

30

Python ต้องการใช้คำหลักภาษาอังกฤษเป็นเครื่องหมายวรรคตอน การใช้งานคือnot x not os.path.exists(...)สิ่งเดียวกันจะไปสำหรับ&&และ||ที่มีandและorในหลาม



1

การรวมอินพุตจากคนอื่น ๆ (ไม่ใช้ไม่ต้องใช้ parens ใช้os.mkdir) คุณจะได้รับ ...

specialpathforjohn = "/usr/share/sounds/blues"
if not os.path.exists(specialpathforjohn):
    os.mkdir(specialpathforjohn)

1
รหัสของคุณ (และของ OP) เป็นอุบัติเหตุที่รอให้เกิดขึ้น - อินสแตนซ์ของสตริงตัวอักษร longish สองตัวที่น่าจะเหมือนกัน และโปรดอย่าตอบโต้ว่ามันเป็นเพียงตัวอย่าง - มันเป็นตัวอย่างที่ไม่ดีสำหรับมือใหม่
John Machin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.