在用Python遍历文件时忽略错误提示

2 投票
1 回答
697 浏览
提问于 2025-04-18 07:49

我现在正在做一个任务,需要用pefile模块来处理多个可执行文件,代码大致是这样的:

while True:
    try:
        for filename in glob.iglob('C:\Documents and Settings\Zha\Desktop\PE benign\*.exe'):
            pe =  pefile.PE(filename)

            print '%x' % pe.FILE_HEADER.NumberOfSections

    except:
        pass

我使用try和except的目的是为了处理错误。当遇到一个可执行文件时,如果它的NT头部出现“无效签名”的错误,代码就会抛出错误。如果我不使用try和except,代码会在遇到这个无效签名的可执行文件时直接停止运行。

如果我不使用try和except,错误信息会是这样的:

PEFormatError: 'Invalid NT Headers signature.' 

不过,使用上面的代码会导致无限循环,有没有什么办法可以解决这个问题呢?

1 个回答

1

不要使用 while True 这种循环。可以把 try except 直接放到 for 循环里面:

for filename in glob.iglob('...'):
    try:
        pe = pefile.PE(filename)
    except PEFormatError as err:
        print "{} in file '{}'".format(err, filename)
        continue

    print '{}'.format(pe.FILE_HEADER.NumberOfSections)

另外,你的字符串格式化写法并没有错,不过 format 是更推荐的字符串格式化方式。

撰写回答