从python

时间:2015-12-06 20:48:17

标签: python-2.7 class methods except raise

我正在阅读类似的问题Returning error string from a function in python。当我尝试在面向对象的编程中创建类似的东西时,我可以学到一些我迷失的东西。

我使用的是Python 2.7,我是面向对象编程的初学者。

我无法弄清楚如何使其发挥作用。

示例代码checkArgumentInput.py:

#!/usr/bin/python

__author__ = 'author'


class Error(Exception):
    """Base class for exceptions in this module."""
    pass


class ArgumentValidationError(Error):
    pass

    def __init__(self, arguments):
        self.arguments = arguments

    def print_method(self, input_arguments):
        if len(input_arguments) != 3:
            raise ArgumentValidationError("Error on argument input!")
        else:
            self.arguments = input_arguments
            return self.arguments

在main.py脚本上:

#!/usr/bin/python
import checkArgumentInput

__author__ = 'author'


argsValidation = checkArgumentInput.ArgumentValidationError(sys.argv)

if __name__ == '__main__':

    try:
        result = argsValidation.validate_argument_input(sys.argv)
        print result
    except checkArgumentInput.ArgumentValidationError as exception:
        # handle exception here and get error message
        print exception.message

当我执行main.py脚本时,它会产生两个空行。即使我没有提供任何参数作为输入,或者即使我提供了参数输入。

所以我的问题是如何让它发挥作用?

我知道有一个模块可以通过检查参数输入argparse来为我工作,但我想实现一些我可以在其他情况下使用的东西(尝试,除了)。

提前感谢您花时间和精力阅读并回复我的问题。

2 个答案:

答案 0 :(得分:0)

行。因此,函数sys.argv[]通常在其末尾使用括号调用,并在括号之间使用数字,例如:sys.argv[1]。此函数将读取您的命令行输入。 Exp。:sys.argv[0]是文件的名称。

main.py 42

在这种情况下,main.py是sys.argv [0]而42sys.argv[1]

您需要识别您将从命令行中获取的字符串。 我认为这就是问题所在。

了解更多信息:https://docs.python.org/2/library/sys.html

答案 1 :(得分:0)

我做了一些研究,我发现这个有用的问题/答案帮助我理解了我的错误:Manually raising (throwing) an exception in Python

我发布了正确的功能代码,以防将来有人受益。

示例代码checkArgumentInput.py:

#!/usr/bin/python

__author__ = 'author'


class ArgumentLookupError(LookupError):
    pass

    def __init__(self, *args): # *args because I do not know the number of args (input from terminal)
        self.output = None
        self.argument_list = args

    def validate_argument_input(self, argument_input_list):
        if len(argument_input_list) != 3:
            raise ValueError('Error on argument input!')
        else:
            self.output = "Success"
            return self.output

第二部分main.py:

#!/usr/bin/python
import sys
import checkArgumentInput

__author__ = 'author'

argsValidation = checkArgumentInput.ArgumentLookupError(sys.argv)

if __name__ == '__main__':

    try:
        result = argsValidation.validate_argument_input(sys.argv)
        print result
    except ValueError as exception:
        # handle exception here and get error message
        print exception.message

以下代码按预期打印:Error on argument input!,因为我违反了条件。

任何方式都要感谢你们的时间和精力,希望这个答案能在将来帮助别人。