Skip to main content
 首页 » 编程设计

python之在 Python 2.7 中运行的代码在 Python 3.5.1 中中断

2025年05月04日16webabcd

我的 Python 代码在 Python 2.7 上运行良好,但是当我在 Python 3 上运行它时,它无法正常工作:

import sys, os, hashlib 
 
dir_name = sys.argv[1] 
 
# Get the total number of args passed to the crawler.py and set default 
# directory 
def check_arguments(): 
    global dir_name 
    total = len(sys.argv) 
    if total > 2: 
        print("Bitte geben Sie nur ein Argument als Startverzeichnis an.") 
        sys.exit() 
    elif total == 2: 
        try: 
            os.listdir(dir_name) 
            print("Startverzeichnis " + dir_name + " wird verwendet.") 
        except: 
            print("Geben Sie ein gültiges Startverzeichnis an.") 
            sys.exit() 
    else: 
        print("Startverzeichnis /tmp wird verwendet.") 
        dir_name = '/tmp' 
 
def create_MD5(dir_name): 
    file_list = [] 
    hash_list = [] 
    for file in os.listdir(dir_name): 
        try: 
            if os.path.isfile(os.path.join(dir_name, file)): 
                print("Folgende Datei gefunden: " , os.path.join(dir_name, file)) 
                file_list.append(file) 
                hash = hashlib.md5.new() 
                f = open(os.path.join(dir_name, file),'rb') 
                hash.update(f.read()) 
                f.close() 
                hash_list.append(hash.digest()) 
 
            elif os.path.isdir(os.path.join(dir_name, file)): 
                print("Folgendes Verzeichnis gefunden:", os.path.join(dir_name, file)) 
                #print_files() 
                fl, hl = create_MD5(os.path.join(dir_name, file)) 
                for i in fl: 
                    file_list.append(i) 
                for i in hl: 
                    hash_list.append(i) 
            else: 
                pass 
        except: 
            print("Fehlende Zugriffsrechte") 
 
    return file_list, hash_list 
 
def print_MD5(): 
    fl, hl = create_MD5(dir_name) 
    for i in range(len(fl)): 
        print(os.path.join("Die Datei ", '%-22s  hat folgenden MD5-Hash: %s' % (fl[i], hl[i]))) 
 
check_arguments() 
print_MD5() 

在控制台中我得到:

Traceback (most recent call last): 
  File "crawler.py", line 77, in <module> 
    print_MD5() 
  File "crawler.py", line 74, in print_MD5 
    print(os.path.join("Die Datei ", '%-22s  hat folgenden MD5-Hash: %s' % (fl[i], hl[i]))) 
IndexError: list index out of range 

我怎样才能更改代码以使其也能与 Python 3 一起运行?

请您参考如下方法:

行:

hashlib.md5.new() 

不正确,应该是:

hashlib.md5() 

这是抛出一个错误,你的异常吃代码正在吃。这就是为什么一般的 except: 无论如何都继续是一个坏主意的原因,尤其是在像您这样的情况下,这可能会使程序处于不良状态。

为什么这在 2.7 上有效我不知道,但我怀疑它可能没有按照你认为的那样去做。

此外,由于 3.x 中的 hashlib 在创建哈希时会重新播种哈希,因此您最好创建一个具有已知哈希的单个实例。