我可以使用一个函数来打印一些东西作为引发异常的参数吗?

时间:2017-03-10 14:39:18

标签: python python-2.7

我有一个打印一些名为print_info()的信息的函数。在提出异常时我可以用它来打印这个信息吗?

raise ValueError('This is invalid. Check the valid items here %s' % str(self.print_info()))

我可以想象这可能有两种方式:

1-调用print_info()函数打印到stdout而不是提供字符串

2-将print_info()函数的输出转换为字符串并将其作为参数传递

我不确定这是否可能,如果可行,我不确定实施它的正确方法。

3 个答案:

答案 0 :(得分:0)

在我看来,只要self.print_info()返回一个字符串(不打印一个字符串!)就可以这样做。

另一个(我更喜欢并将为您处理str转换)是:

raise ValueError('This is invalid. Check the valid items here {}'.format(self.print_info()))

示例1:

class Foo(object):
    def gg(self):
        return 'Hello!'

>>> f = Foo()
>>> raise ValueError('123... {}'.format(f.gg()))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 123... Hello!

示例2:

class foo(object):
    def gg(self):
        return 'Hello!'
    def xx(self):
        raise ValueError('123... {}'.format(self.gg()))

>>> f = foo()
>>> f.xx()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in xx
ValueError: 123... Hello!

答案 1 :(得分:0)

print是一个声明(在Py2.7中),它将某些内容输出到标准输出。除非您的print_info函数返回相同的字符串,否则这将无效。

如果您需要以多种方式使用信息字符串(打印,例外等),那么最好将字符串创建和输出分开:

def make_info():
    return 'This is my info string.'

def print_info():
    print make_info()

def raise_info():
    raise ValueError('Something happened. See info: {}'.format(make_info())

答案 2 :(得分:0)

更清洁的方法

def print_info():
    print 'This is invalid. Check the valid items here'

try:
    a =  int(raw_input())

except ValueError as p:
    print_info()

else:
    print a 

结果

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
10
10
>>> ================================ RESTART ================================
>>> 
wdfdsnj
This is invalid. Check the valid items here
>>>