如何在python的另一个模块中除了ValueError?

时间:2014-02-28 07:04:46

标签: python python-2.7 error-handling

第一档:

try:

    # some code

except ValueError, Argument:

    print Argument

第二档:

company = "App"

if company is "Apple":

    # code

elif company is "Samsung":

    # code

else:

    raise ValueError("Invalid compnay name") 

我的要求是在文件中引发错误,而在另一个文件中除外。

我尝试了上面的代码,但它不接受引发的ValueError。

2 个答案:

答案 0 :(得分:2)

首次加载时执行的模块中的顶级代码,通常不是您想要的。您需要具有可以从其他模块调用的功能。这个函数调用很容易包装。

例如,假设您有一个带有以下代码的module1

# module1.py

def do_something():
    # blabla
    raise ValueError

然后在你的module2中,你可以导入module1并使用do_something,将它包装在try-except块中

# module2

import module1

try:
    module1.do_something()

except ValueError:
    print "bam! exception!"

修改

旁注:按身份比较字符串是错误的。它的工作原因是对象缓存...直到它没有。您想比较字符串是否具有显式值。例如:

if company == "Apple":
    # blabla

数字也是如此。

这有效

>>> a = 4
>>> b = 4
>>> a is b
True

但事实并非如此,因为数字并不总是被缓存

>>> a = 99999999
>>> b = 99999999
>>> a is b
False

答案 1 :(得分:1)

将第二个文件中的代码重构为函数:

def checkCompany(company):
    if company == "Apple":  #DON'T use "is" to check the equality of strings
        pass
    elif company == "Samsung":
        pass
    else:
        raise ValueError("Invalid compnay name") 

然后导入&从你的第一个文件中调用它:

import your_second_file
try:
    name='apppple'  #an invalid company name
    your_second_file.checkCompany(name)
except ValueError, e:
    print e