0

この単純な wxpytohn スクリプトで次のエラーが発生します。何が問題なのですか? エラーメッセージは、スクリプトでエラーが発生した行を示していません。

Traceback (most recent call last):
  File "c:\Python27\lib\site-packages\spyderlib\plugins\externalconsole.py", line 721, in run_script_in_current_shell
    "and try again.") % osp.basename(filename), QMessageBox.Ok)
  File "c:\Python27\lib\ntpath.py", line 198, in basename
    return split(p)[1]
  File "c:\Python27\lib\ntpath.py", line 173, in split
    while i and p[i-1] not in '/\\':
TypeError: 'in <string>' requires string as left operand, not QString

これはスクリプトです:

import wx
import os


def getParentFolder():
    moduleFile = __file__
    moduleDir = os.path.split(os.path.abspath(moduleFile))[0]
    programFolder = os.path.abspath(moduleDir)
    parentFolder = os.path.abspath(os.path.join(programFolder, os.pardir))
    return programFolder, parentFolder

class MainWindow(wx.Frame):

    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(1200,900))
        #self.Bind(wx.EVT_CLOSE, self.closeWindow)
        self.SetIcon(wx.Icon("plane.ico", wx.BITMAP_TYPE_ICO))
        self.Center()

        icons_folder = getParentFolder()[1] 

        menubar = wx.MenuBar()
        scenario_menu = wx.Menu()
        database_menu= wx.Menu()
        settings_menu = wx.Menu()


        open_scenario = wx.MenuItem(scenario_menu, 101, '&Open\tCtrl+O', 'Open an existing scenario')
        open_scenario.SetIcon((wx.Icon(icons_folder+"\\open_dir.ico", wx.BITMAP_TYPE_ICO)))
        scenario_menu.AppendItem(open_scenario)

        scenario_menu.Append(102, "&Create", "Create new scenario")
        scenario_menu.Append(103, "&Save", "Save scenario")

        menubar.Append(scenario_menu, "&File")
        menubar.Append(database_menu, "&Database")
        menubar.Append(settings_menu, "&Settings")



if __name__ == "__main__":
    app = wx.App()
    frame = MainWindow("CrewOpt")
    frame.Show()
    app.MainLoop()  
4

3 に答える 3

1

これにはspyderlibの問題がありますhere . どうやら閉鎖されているようですので、ライブラリを更新してみて、まだ問題があるかどうかを確認してください。

ログ

Log message

Executing script in current Python/IPython interpreter while no interpreter is
running was raising a TypeError exception:

Traceback (most recent call last):
  File "[...]\spyderlib\plugins\externalconsole.py", line 722, in
run_script_in_current_shell
    "and try again.") % osp.basename(filename), QMessageBox.Ok)
  File "[...]\python-2.7.5.amd64\lib\ntpath.py", line 198, in basename
    return split(p)[1]
  File "[...]\python-2.7.5.amd64\lib\ntpath.py", line 173, in split
    while i and p[i-1] not in '/\\':
TypeError: 'in <string>' requires string as left operand, not QString

Update  Issue 1540 
Status: Fixed

Affected files
    expand all   collapse all
    Modify  /spyderlib/plugins/externalconsole.py   diff
于 2013-09-11T10:58:17.430 に答える
0

問題は

p[i-1] not in '/\\'

p[i-1]QString一方、Python は文字列を期待します。たぶん

str(p[i-1]) not in '/\\'

問題を解決します。

于 2013-09-11T10:51:26.693 に答える
0

2015 年 12 月現在、#1540 の報告された問題は修正されたと言われていますが、同じ問題が存在するのは奇妙です: (たとえば) 次の行を含むコード:

newPath = os.path.dirname(newFile)

クモの下を走る。Windows の cmd でコンパイルすると TypeError: TypeError: 'in ' requires string as left operand, not QString がスローされます

次のことを検討してください。

newPath = os.path.dirname(str(newFile))
于 2015-12-13T02:04:02.780 に答える