Eli*_*any 5 python redirect exec stdio stringio
我有这个代码在Python 2.5中运行良好,但在2.7中没有:
import sys
import traceback
try:
from io import StringIO
except:
from StringIO import StringIO
def CaptureExec(stmt):
oldio = (sys.stdin, sys.stdout, sys.stderr)
sio = StringIO()
sys.stdout = sys.stderr = sio
try:
exec(stmt, globals(), globals())
out = sio.getvalue()
except Exception, e:
out = str(e) + "\n" + traceback.format_exc()
sys.stdin, sys.stdout, sys.stderr = oldio
return out
print "%s" % CaptureExec("""
import random
print "hello world"
""")
Run Code Online (Sandbox Code Playgroud)
我得到:
string argument expected, got 'str'
Traceback (most recent call last):
File "D:\3.py", line 13, in CaptureExec
exec(stmt, globals(), globals())
File "", line 3, in
TypeError: string argument expected, got 'str'
Ned*_*der 14
io.StringIO在Python 2.7中令人困惑,因为它从3.x字节/字符串世界向后移植.此代码与您的错误相同:
from io import StringIO
sio = StringIO()
sio.write("Hello\n")
Run Code Online (Sandbox Code Playgroud)
原因:
Traceback (most recent call last):
File "so2.py", line 3, in <module>
sio.write("Hello\n")
TypeError: string argument expected, got 'str'
Run Code Online (Sandbox Code Playgroud)
如果您只使用Python 2.x,则io完全跳过该模块,并坚持使用StringIO.如果您确实要使用io,请将导入更改为:
from io import BytesIO as StringIO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4986 次 |
| 最近记录: |