我有一个打印一些名为print_info()
的信息的函数。在提出异常时我可以用它来打印这个信息吗?
raise ValueError('This is invalid. Check the valid items here %s' % str(self.print_info()))
我可以想象这可能有两种方式:
1-调用print_info()
函数打印到stdout而不是提供字符串
2-将print_info()
函数的输出转换为字符串并将其作为参数传递
我不确定这是否可能,如果可行,我不确定实施它的正确方法。
答案 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
>>>