Python: rebound & Help

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 16:36

TOП-50 Python-проектов в 2018: самые востребованные инструменты
Хотите сэкономить время на дебаггинге? Когда в процессе разработки компилятор выдает ошибку, больше не нужно отправляться за подсказкой на просторы Stack Overflow. Один из самых полезных Python-проектов для командной строки Rebound мгновенно извлекает с сервиса релевантные ответы.
Это как раз самое то, что нужно иметь под рукой работая с кодом Python.

GIT страница проекта здесь: shobrook/rebound
Command-line tool that instantly fetches Stack Overflow results when an exception is thrown

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 16:40

Olej писал(а):
22 ноя 2019, 16:36
Это как раз самое то, что нужно иметь под рукой работая с кодом Python.

Код: Выделить всё

olej@ACER:~$ sudo apt show rebound
Package: rebound
Version: 2.0.0-1
Priority: optional
Section: misc
Maintainer: SZ Lin (林上智) <szlin@debian.org>
Installed-Size: 58,4 kB
Depends: python3-bs4, python3-requests, python3-urllib3, python3-urwid, python3:any, python3
Homepage: https://github.com/shobrook/rebound
Download-Size: 13,0 kB
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian buster/main amd64 Packages
Description: Command-line tool to fetch Stack Overflow results when program execution error
 Rebound is a command-line tool that instantly fetches
 Stack Overflow results when getting a program execution
 error in multiple programming languages. This tool will
 execute the program, pull the error message if needed,
 and display related Stack Overflow questions and answers
 without leaving the terminal.
 .
 Features
 .
  - Supported file types:
    - Python
    - Node.js
    - Java
    - Golang
    - Ruby
  - View answers in command line mode
  - Open browser for GUI
Обратите внимание, что это не только для Python!

Код: Выделить всё

olej@ACER:~$ sudo apt install rebound
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  python3-urwid
Предлагаемые пакеты:
  python-urwid-doc
Следующие НОВЫЕ пакеты будут установлены:
  python3-urwid rebound
Обновлено 0 пакетов, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 64 пакетов не обновлено.
Необходимо скачать 187 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 996 kB.
Хотите продолжить? [Д/н] y
Пол:1 http://deb.debian.org/debian buster/main amd64 python3-urwid amd64 2.0.1-2+b1 [174 kB]
Пол:2 http://deb.debian.org/debian buster/main amd64 rebound all 2.0.0-1 [13,0 kB]
Получено 187 kB за 1с (194 kB/s)
Выбор ранее не выбранного пакета python3-urwid.
(Чтение базы данных … на данный момент установлено 414692 файла и каталога.)
Подготовка к распаковке …/python3-urwid_2.0.1-2+b1_amd64.deb …
Распаковывается python3-urwid (2.0.1-2+b1) …
Выбор ранее не выбранного пакета rebound.
Подготовка к распаковке …/rebound_2.0.0-1_all.deb …
Распаковывается rebound (2.0.0-1) …
Настраивается пакет python3-urwid (2.0.1-2+b1) …
Настраивается пакет rebound (2.0.0-1) …

Код: Выделить всё

olej@ACER:~$ which rebound
/usr/bin/rebound

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 16:48

Olej писал(а):
22 ноя 2019, 16:40

Код: Выделить всё

olej@ACER:~$ which rebound
/usr/bin/rebound

Код: Выделить всё

olej@ACER:~$ rebound --help
Rebound, V1.1.9a1 - Made by @shobrook
Command-line tool that automatically searches Stack Overflow and displays results in your terminal when you get a compiler error.

Usage: $ rebound [file_name]

$ python3 test.py   =>   $ rebound test.py

$ node test.js     =>   $ rebound test.js

If you just want to query Stack Overflow, use the -q parameter: $ rebound -q What is an array comprehension?
Это ncurses приложение, котрое выбират все сообщения по теме ошибки и позволяет перейти к его чтению:

Код: Выделить всё

olej@ACER:~$ rebound -q What is an array comprehension?
...
Вложения
r1.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 16:52

Olej писал(а):
22 ноя 2019, 16:48
Это ncurses приложение, котрое выбират все сообщения по теме ошибки и позволяет перейти к его чтению:
Только при выборе альтернативы на терминал по Enter (см. картинку выше), любой альтернативы - приложение слетает аварийно:

Код: Выделить всё

olej@ACER:~$ rebound -q What is an array comprehension?
Traceback (most recent call last):
  File "/usr/bin/rebound", line 11, in <module>
    load_entry_point('rebound-cli==1.1.9a1', 'console_scripts', 'rebound')()
  File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 844, in main
    App(search_results) # Opens interface
  File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 733, in __init__
    self.main_loop.run()
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 286, in run
    self._run()
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 384, in _run
    self.event_loop.run()
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 788, in run
    self._loop()
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 825, in _loop
    self._watch_files[fd]()
  File "/usr/lib/python3/dist-packages/urwid/raw_display.py", line 404, in <lambda>
    event_loop, callback, self.get_available_raw_input())
  File "/usr/lib/python3/dist-packages/urwid/raw_display.py", line 502, in parse_input
    callback(processed, processed_codes)
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 411, in _update
    self.process_input(keys)
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 517, in process_input
    something_handled |= bool(self.unhandled_input(k))
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 563, in unhandled_input
    return self._unhandled_input(input)
  File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 742, in _handle_input
    question_title, question_desc, question_stats, answers = get_question_and_answers(url)
  File "/usr/lib/python3/dist-packages/rebound/rebound.py", line 307, in get_question_and_answers
    question_stats = soup.find_all("span", class_="vote-count-post")[0].get_text() # Vote count
IndexError: list index out of range
С этим нужно разбираться.
Но зато по выбору 'B' - во вкладку браузера - всё замечательно отображается...
Вложения
r2.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 18:18

Хороший обзор статических анализаторов кода Python:
Инструменты для анализа кода Python. Часть 1
pycodestyle
pydocstyle
pyflakes
pylint
vulture
Инструменты для анализа кода Python. Часть 2
flake8
prospector
pylama
autopep8
yapf
black

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 18:52

Olej писал(а):
22 ноя 2019, 18:18
Хороший обзор статических анализаторов кода Python:
Из этих анализаторов/трансформаторов кода мне симпатичен YAPF от Google ... пофигу мне неприязнь "рукопожатной" общественности к Google:

Код: Выделить всё

olej@ACER:~$ aptitude search yapf
p   python-yapf                                                                        - public modules for yapf (Python 2)                                                           
i A python3-yapf                                                                       - public modules for yapf (Python 3)                                                           
p   yapf                                                                               - Python code formatter for different styles (Python 2)                                        
i   yapf3                                                                              - Python code formatter for different styles (Python 3)          
Для YAPF есть Итернет-онлайн реализация, для реформатирования небольших текстов, или для ознакомления: YAPF Online Demo:
y1.png
Приятно, что YAPF позволяет выбрать для кода несколько стилей: pep8, google, chromium, facebook (на картинке использовался стиль pep8).

Исходный код был:

Код: Выделить всё

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

if len( sys.argv ) > 1:  n = int( sys.argv[ 1 ] )
else: n = int( input( "число?: " ) )

try:               # Python 2
    factorial = lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) )
    print( "n={} => n!={}".format( n, factorial( n ) ) )
except NameError:  # Python 3
    import functools
    factorial = lambda z: functools.reduce( lambda x, y: x * y, range( 1, z + 1 ) )
    print( "n={} => n!={}".format( n, factorial( n ) ) )
YAPF предложил его видеть в таком виде:

Код: Выделить всё

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

if len(sys.argv) > 1: n = int(sys.argv[1])
else: n = int(input("число?: "))

try:  # Python 2
    factorial = lambda z: reduce(lambda x, y: x * y, range(1, z + 1))
    print("n={} => n!={}".format(n, factorial(n)))
except NameError:  # Python 3
    import functools
    factorial = lambda z: functools.reduce(lambda x, y: x * y, range(1, z + 1))
    print("n={} => n!={}".format(n, factorial(n)))
Практически он поубирал пробелы после-перед функциональными скобками.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: rebound & Help

Непрочитанное сообщение Olej » 22 ноя 2019, 19:04

Olej писал(а):
22 ноя 2019, 18:52
Из этих анализаторов/трансформаторов кода мне симпатичен YAPF от Google ... пофигу мне неприязнь "рукопожатной" общественности к Google:
Для консольной утилиты это можно использовать так:

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/11/22$ yapf3 --style facebook fact3.py > fact3.2.py 

olej@ACER:~/2019_WORK/HISTORY/11/22$ diff fact3.py fact3.2.py 
6,7c6,9
< if len( sys.argv ) > 1:  n = int( sys.argv[ 1 ] )
< else: n = int( input( "число?: " ) )
---
> if len(sys.argv) > 1:
>     n = int(sys.argv[1])
> else:
>     n = int(input("число?: "))
9,11c11,13
< try:               # Python 2
<     factorial = lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) )
<     print( "n={} => n!={}".format( n, factorial( n ) ) )
---
> try:  # Python 2
>     factorial = lambda z: reduce(lambda x, y: x * y, range(1, z + 1))
>     print("n={} => n!={}".format(n, factorial(n)))
14,16c16,17
<     factorial = lambda z: functools.reduce( lambda x, y: x * y, range( 1, z + 1 ) )
<     print( "n={} => n!={}".format( n, factorial( n ) ) )
< 
---
>     factorial = lambda z: functools.reduce(lambda x, y: x * y, range(1, z + 1))
>     print("n={} => n!={}".format(n, factorial(n)))
А вообще... :-D

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/11/22$ yapf3 --help
usage: yapf3 [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
             [--style STYLE] [--style-help] [--no-local-style] [-p] [-vv]
             [files [files ...]]

Formatter for Python code.

positional arguments:
  files                 Reads from stdin when no files are specified.

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show version number and exit
  -d, --diff            print the diff for the fixed source
  -i, --in-place        make changes to files in place
  -r, --recursive       run recursively over directories
  -l START-END, --lines START-END
                        range of lines to reformat, one-based
  -e PATTERN, --exclude PATTERN
                        patterns for files to exclude from formatting
  --style STYLE         specify formatting style: either a style name (for
                        example "pep8" or "google"), or the name of a file
                        with style settings. The default is pep8 unless a
                        .style.yapf or setup.cfg file located in the same
                        directory as the source or one of its parent
                        directories (for stdin, the current directory is
                        used).
  --style-help          show style settings and exit; this output can be saved
                        to .style.yapf to make your settings permanent
  --no-local-style      don't search for local style definition
  -p, --parallel        Run yapf in parallel when formatting multiple files.
                        Requires concurrent.futures in Python 2.X
  -vv, --verbose        Print out file names while processing

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей