jed*_*mao 9 python windows error-handling path disk
这是我到目前为止所拥有的:
import os.path as op
for d in map(chr, range(98, 123)): #drives b-z
if not op.isdir(d + ':/'): continue
Run Code Online (Sandbox Code Playgroud)
问题是它在Windows中弹出一个"No Disk"错误框:
maya.exe - 无磁盘:驱动器中没有磁盘.请将磁盘插入驱动器\ Device\Harddisk1\DR1 [取消,重试,继续]
我无法捕获异常,因为它实际上没有抛出Python错误.
显然,这只发生在已分配字母但未插入驱动器的可移动驱动器上.
有没有办法解决这个问题,而没有特别告诉脚本哪些驱动器跳过?
在我的场景中,我在学校实验室,驱动器号码根据我所在的实验室计算机而变化.此外,我没有访问磁盘管理的安全权限.
使用ctypes包来访问该GetLogicalDrives功能.这不需要像pywin32这样的外部库,所以它是可移植的,尽管使用它有点笨拙.例如:
import ctypes
import itertools
import os
import string
import platform
def get_available_drives():
if 'Windows' not in platform.system():
return []
drive_bitmask = ctypes.cdll.kernel32.GetLogicalDrives()
return list(itertools.compress(string.ascii_uppercase,
map(lambda x:ord(x) - ord('0'), bin(drive_bitmask)[:1:-1])))
Run Code Online (Sandbox Code Playgroud)
itertools.compress在Python 2.7和3.1中添加; 如果你需要支持<2.7或<3.1,这里是该函数的一个实现:
def compress(data, selectors):
for d, s in zip(data, selectors):
if s:
yield d
Run Code Online (Sandbox Code Playgroud)
这是一种适用于 Windows 和 Linux 的方法,适用于 Python 2 和 3:
import platform,os
def hasdrive(letter):
return "Windows" in platform.system() and os.system("vol %s: 2>nul>nul" % (letter)) == 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11253 次 |
| 最近记录: |