40912


先程は情報提供をしていただきありがとうございます。複数行のデータを入力できるようになったのは良かったのですが、Pycharmでデバッグを行おうとすると、以下のログのようなエラーが出ます。

[code]

    C:\ProgramData\Anaconda3\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 61322 --file C:/Users/keito940/PycharmProjects/AOJTest/AOJTest.py
    pydev debugger: process 18256 is connecting
    
    Connected to pydev debugger (build 173.3727.137)
    Traceback (most recent call last):
      File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3\helpers\pydev\pydevd.py", line 1683, in <module>
        main()
      File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3\helpers\pydev\pydevd.py", line 1677, in main
        globals = debugger.run(setup['file'], None, None, is_module)
      File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3\helpers\pydev\pydevd.py", line 1087, in run
        pydev_imports.execfile(file, globals, locals)  # execute the script
      File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
        exec(compile(contents+"\n", file, 'exec'), glob, loc)
      File "C:/Users/keito940/PycharmProjects/AOJTest/AOJTest.py", line 28, in <module>
        main()
      File "C:/Users/keito940/PycharmProjects/AOJTest/AOJTest.py", line 19, in main
        for line in stdin:
    TypeError: 'DebugConsoleStdIn' object is not iterable
    
[/code]

以下は上記のエラーが発生したプログラムのソースコードです。

[code]

    def main():
        # プログラムとしては入力したデータを表示するだけのシンプルなもの。
        l = []
    
        for line in stdin:
            a = line.rstrip().split(' ')
            l.append(a)
    
        print(l)
    
    if __name__ == "__main__":
        main()
    
[/code]

追記:shingo.nakanishiさんが、解決方法を提示してくれたみたいですので、先ほどと同じプログラムをその方法で組んでみました。

[code]

    import argparse
    
        def main():
            # プログラムとしては入力したデータを表示するだけのシンプルなもの。
            # なお、入力はテキストファイルで行う模様。
            l = []
    
            parser = argparse.ArgumentParser()
            parser.add_argument("filename", help="The filename to be processed")
            args = parser.parse_args()
    
            if args.filename:
                with open(args.filename) as f:
                    for line in f:
                          a,b = line.rstrip().split(' ')
                          l.append([a,b])
    
            print(l)
    
        if __name__ == "__main__":
            main()
    
[/code]

クラスに依存しない方法を提供してくれてありがとうございます！！


CC BY-SA 3.0
2018-01-12T08:55:30.040
40908
2018-01-13T05:14:27.597
2018-01-13T05:14:27.597
26886
26886
question
python python3
DebugConsoleStdInエラーの原因がわからない。


> TypeError: 'DebugConsoleStdIn' object is not iterable

既定の stdin はファイルオブジェクトであり、IOBase を継承しているためイテレートが可能になっています。

> IOBase (とそのサブクラス) はイテレータプロトコルをサポートします。 IOBase オブジェクトをイテレートすると、ストリーム内の行が
> yield されます。  
>  <https://docs.python.jp/3/library/io.html#io.IOBase>

一方、PyDev 経由ですと stdin が置換されファイルオブジェクトではなくなってしまっているので、イテレートができない、という事だと思います。

>
[code]

>     class DebugConsoleStdIn(BaseStdIn):
>  
[/code]

>
> [PyDev.Debugger/pydev_console_utils.py at master · fabioz/PyDev.Debugger >
> DebugConsoleStdIn](https://github.com/fabioz/PyDev.Debugger/blob/master/_pydev_bundle/pydev_console_utils.py#L135)


CC BY-SA 3.0
2018-01-12T11:03:40.287
40912
2018-01-12T11:03:40.287
26808
40908
answer