Python 2.7 在PyCharm中使用nosetests,并排安装python2和python3

Python 2.7 在PyCharm中使用nosetests,并排安装python2和python3,python-2.7,python-3.x,pycharm,nose,nosetests,Python 2.7,Python 3.x,Pycharm,Nose,Nosetests,我试图在PyCharm(2.7.3)中将NoTest与Python2和Python3并排使用 在Python2.7下,一切正常,但Python3.4中的任何测试都会失败,并出现以下错误: Traceback (most recent call last): File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/noserunner.py", line 91, in <module> process_args(

我试图在PyCharm(2.7.3)中将NoTest与Python2和Python3并排使用

在Python2.7下,一切正常,但Python3.4中的任何测试都会失败,并出现以下错误:

Traceback (most recent call last):
  File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/noserunner.py", line 91, in <module>
    process_args()
  File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/noserunner.py", line 88, in process_args
    TestProgram(argv=argv, config=config)
  File "/usr/local/lib/python3.4/dist-packages/nose/core.py", line 121, in __init__
    **extra_args)
  File "/usr/lib/python3.4/unittest/main.py", line 93, in __init__
    self.runTests()
  File "/usr/local/lib/python3.4/dist-packages/nose/core.py", line 207, in runTests
    result = self.testRunner.run(self.test)
  File "/usr/local/lib/python3.4/dist-packages/nose/core.py", line 62, in run
    test(result)
  File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 177, in __call__
    return self.run(*arg, **kw)
  File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 224, in run
    test(orig)
  File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 177, in __call__
    return self.run(*arg, **kw)
  File "/usr/local/lib/python3.4/dist-packages/nose/suite.py", line 224, in run
    test(orig)
  File "/usr/local/lib/python3.4/dist-packages/nose/case.py", line 46, in __call__
    return self.run(*arg, **kwarg)
  File "/usr/local/lib/python3.4/dist-packages/nose/case.py", line 139, in run
    result.addError(self, err)
  File "/usr/local/lib/python3.4/dist-packages/nose/proxy.py", line 131, in addError
    plugins.addError(self.test, err)
  File "/usr/local/lib/python3.4/dist-packages/nose/plugins/manager.py", line 99, in __call__
    return self.call(*arg, **kw)
  File "/usr/local/lib/python3.4/dist-packages/nose/plugins/manager.py", line 167, in simple
    result = meth(*arg, **kw)
  File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/nose_utils.py", line 51, in addError
    err = self.formatErr(err)
  File "/home/robert/Programme/pycharm-2.7.3/helpers/pycharm/nose_utils.py", line 58, in formatErr
    return ''.join(traceback.format_exception(exctype, value, tb))
  File "/usr/lib/python3.4/traceback.py", line 181, in format_exception
    return list(_format_exception_iter(etype, value, tb, limit, chain))
  File "/usr/lib/python3.4/traceback.py", line 146, in _format_exception_iter
    for value, tb in values:
  File "/usr/lib/python3.4/traceback.py", line 125, in _iter_chain
    context = exc.__context__
AttributeError: 'str' object has no attribute '__context__'
我要怎么做才能解决这个问题?如何为pyCharm(2.7.3)中的Python3测试选择合适的运行程序?谢谢


编辑:顺便说一句,pyCharm 2.7.3可以,在这里发布我的解决方法,让其他人更容易找到。将
PathToPyCharm/pycharm-2.7.3/helpers/pycharm/nose_utils.py
中的第58行替换为

if sys.version_info[0]==3:
    return ''.join(traceback.format_exception(exctype, value, tb, chain=False))
else:
    return ''.join(traceback.format_exception(exctype, value, tb))
使
nosetests
与python 3.4和2.7一起工作。然而,使用Python3.4,如果发生错误,整个堆栈跟踪将丢失。因此,调试成为一场噩梦:(


最后,我通过简单地将PyCharm版本升级到3.4.1解决了这个问题。

如果更改
return'。join(traceback.format\u exception(exctype,value,tb))
return'。join(traceback.format\u exception(exctype,value,tb,chain=False))是否会消失
/home/robert/program/pycharm-2.7.3/helpers/pycharm/nose_utils.py
的第58行?是的,谢谢,成功了。你想把它作为一个真实的答案而不是一条评论,这样我就可以把它标记为已回答了吗?嗯,现在的问题是,我再也没有回溯了。所以调试成了一场噩梦,有解决办法吗?而且,还有此外,在Python2.7.3下,使用关键字参数
chain=False
不起作用,测试也不会启动。但我想同时使用这两个参数。这个解决方法在pycharm 4.0.3和python 3.4.2中仍然有效。在pycharm 4.5中,这仍然是一个问题,但现在需要更改第70行。在4.5.4中仍然是一个问题,仍然可以继续使用第70行。我在PyCharm 5.0.4中仍然有这个问题。我在5.04中也有这个问题!我不想修改PyCharm的代码来让事情顺利进行!
if sys.version_info[0]==3:
    return ''.join(traceback.format_exception(exctype, value, tb, chain=False))
else:
    return ''.join(traceback.format_exception(exctype, value, tb))