0

我是 Python 新手。我遇到了一个奇怪的案例,无法弄清楚问题所在。我有 2 个版本的用 Python 编写的函数:-

v1 -

def fileLookUp(fixedPath, version):
    if version:
        targetFile="c:\\null\\patchedFile.txt"
    else:
        targetFile="c:\\null\\vulFile.txt"

#some more code follows

和 v2 -

def fileLookUp(fixedPath, version):
    if version:
        print "ok"
    else:
        print "not ok"

#some more code follows

其中参数 fixedPath 是输入的字符串,参数 version 应该是整数值。第一个功能(v1)没有按预期工作,而第二个功能完美。这两次函数都被称为fileLookUp("c:\\dir\\dir\\", 1).

在第一种情况下,收到的错误是:-

fileLookUp("D:\\Celine\\assetSERV\\", 1)
Exception: fileLookUp() takes exactly 2 arguments (1 given)

请让我知道为什么第一个函数抛出异常?

这是实际的代码....

from System.IO import *;

def fileLookUp(fixedPath, version):
if version:
    targetFile="c:\\null\\patchedFile.txt";
else:
    targetFile="c:\\null\\vulFile.txt";
vulFileHandle=open(targetFile,"a+");
temp=fixedPath;
if not Directory.GetDirectories(fixedPath):
    files=Directory.GetFiles(fixedPath);
    for eachFile in files:
        print eachFile;
        hash = Tools.MD5(eachFile);
        print hash;
        vulFileHandle.write(eachFile+'\t'+hash+'\n');
else:
    directory=Directory.GetDirectories(fixedPath);
    for folder in directory:
        if vulFileHandle.closed:
            vulFileHandle=open(targetFile,"a+");
        fixedPath="";
        fixedPath+=folder;
        fixedPath+="\\";
        vulFileHandle.close();
        fileLookUp(fixedPath);
    filess=Directory.GetFiles(temp);
    for eachFilee in filess:
        if vulFileHandle.closed:
            vulFileHandle=open(targetFile,"a+");
        print eachFilee;
        hashh = Tools.MD5(eachFilee);
        print hashh;
        vulFileHandle.write(eachFilee+'\t'+hashh+'\n');
if not vulFileHandle.closed:
    vulFileHandle.close();

它只是一个递归代码,用于打印目录中所有文件的哈希值。

4

3 回答 3

3

你有一个电话“fileLookUp(fixedPath);” 在第 26 行左右(只是粗略计算),只发送了一个参数。您的定义不允许这样做。在此调用中发送版本,或在定义中为版本提供默认值。

于 2013-05-14T15:20:23.257 回答
1

这些函数的编写方式,它们都必须用两个参数调用。您收到的错误消息表明只有一个参数调用其中一个。在 Python 中,如果要使参数成为可选参数,则必须明确说明如果未提供可选参数应具有的值。例如,因为versionis 是一个int,并且您使用 对其进行测试if version:,所以一个好的默认值可以是 0。您也可以使用None.

def fileLookUp(fixedPath, version=0):
    # etc.

def fileLookUp(fixedPath, version=None):
    # etc.

如果 0 是有效的版本号,并且您想测试一个值是否实际通过,请使用第二个并None专门测试:

def fileLookUp(fixedPath, version=None):
    if version is None:
        # etc.
于 2013-05-14T15:13:33.377 回答
1

在(格式非常糟糕的)完整示例中,您正在递归调用fileLookUp 传递version参数。

于 2013-05-14T15:21:18.087 回答