zoukankan      html  css  js  c++  java
  • python中异常好用的工具

    python中异常好用的工具

    PrettyErrors

    安装

    它的安装特别的简单,直接pip就可以

    pip install pretty_errors
    #没有安装pip的,可以采用下面的方式安装
    python -m pip install pretty_errors
    

    效果

    PrettyErrors是一个Python异常输出美化工具,可以帮你整理混乱的报错信息,效果异常显著

    68747470733a2f2f692e696d6775722e636f6d2f306a7045716f622e706e67.png

    配置

    使用的话,可以在需要时import pretty_errors

    但是如果不想每次写代码是都引入这个库,可以直接进行全局配置,一条命令就搞定

     python3 -m pretty_errors
    

    配置完成后,你再运行任何脚本,报错信息就会自动美化了。

    然而,有些情况下,你并不想设置 pretty_errors 全局可用。

    那怎么取消之前的配置呢?

    只需要再次输出 python3 -m pretty_errors,输出入 C 即可清除。

    自定义

    当然,如此强大的工具自然具备强大的自定义设置

    上面的例子里,我们使用的都是 pretty_errors 的默认美化格式,展示的信息并没有那么全。

    比如

    • 它并没有展示报错文件的绝对路径,这将使我们很难定位到是哪个文件里的代码出现错误。
    • 如果能把具体报错的代码,给我们展示在终端屏幕上,就不需要我们再到源码文件中排查原因了。

    不过,可以告诉你的是,pretty_errors 并没有你想象的那么简单。

    它足够开放,支持自定义配置,可以用pretty_errors.configure()、pretty_errors.whitelist()、pretty_errors.blacklist()、pretty_errors.pathed_config(),可以由你选择你需要展示哪些信息,怎么展示?

    例如:

    import pretty_errors
    
    # 【重点】进行配置
    pretty_errors.configure(
        separator_character = '*',
        filename_display    = pretty_errors.FILENAME_EXTENDED,
        line_number_first   = True,
        display_link        = True,
        lines_before        = 5,
        lines_after         = 2,
        line_color          = pretty_errors.RED + '> ' + pretty_errors.default_config.line_color,
        code_color          = '  ' + pretty_errors.default_config.line_color,
    )
    
    # 原来的代码
    def foo():
        1/0
    
    if __name__ == "__main__":
        foo()
    

    image-20200308121949011.png

    IPython和bpython

    IPython

    IPython 是一个 for Humans 的 Python 交互式 shell,用了它之后你就不想再用自带的 Python shell 了,IPython 支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多实用功能和函数,同时它也是科学计算和交互可视化的最佳平台。

    安装异常简单

    pip3 install ipython
    

    但是效果确实异常显著

    UTOOLS1586697975901.png

    bpython

    bpython是轻量级的Python解析器,同时包含了常见的IDE功能。功能包括语法高亮,预计参数列表、自动缩进和自动补全

    功能特点

    1、自动补全,在输入时显示代码提示。
    2、语法高亮。本项目采用Pygments来进行代码格式化和显示颜色。
    3、预计参数列表。bpython可以像其他IDE一样在调用函数时显示参数列表。
    4、回退功能。这里为了避免与通常的撤销(undo)混淆,而使用回退(rewind)一词。基本思想是所有的代码都保存在内存里,当使用回退功能时,最后一行代码会被剔除,然后重新运行之前的代码,相当于整个会话回到之前的状态。用进行回退。
    5、允许使用其他文本编辑器编辑当前行代码或者整个会话的代码。按可以在文本编辑器里打开当前会话的代码。如果在文本编辑器里做了改动,这个改动也会反映在当前会话中。
    6、支持Pastebin。按可以把屏幕内容上传到Pastebin,同时返回它的URL。
    7、重新加载已经导入的模块。 按可以清除sys.modules里的内容并重新运行当前会话的代码。可以用来测试module的改动。

    安装

    安装可以用pip3 install bpython安装,也可以从官网下载

    windows用户安装可以参考这个,windows用户不容易啊!

    异常

    一些人运行时提示 ImportError: No module named _curses

    whindows用户可以在这里下载相应的whl文件,通过 pip install name.whl来安装

    linux用户或者一些其它错误可以参考这里,看看和你的情况是否一样

    效果

    ss.gif

    IPdb

    ipdb是pdb的增强版,是python开发的调试工具。ipdb对于Python,就像gdb对于C/C++。Windows下我们可以使用PyCharm等IDE开发环境进行开发调试,Linux等非GUI开发环境,ipdb则是一个不错的选择。

    安装可以直接pip install ipdb

    使用

    • 第一种方法
    • python -m ipdb xxx.py 单步调试
    • 第二种方法
    • 在需要断点的地方插入两句话
    from ipdb import set_trace
    set_trace()
    
    • 运行程序后, 会在执行到set_trace()的时候中断程序 并出现提示符
    • ipdb>
    • 好像进入了 ipython 一样

    常用的命令

    • help:显示帮助信息
    • a(rgs):打印当前函数的参数列表 ★★★
    • b(reak) [ ([filename:]lineno | function) [, condition] ]:设置断点,可以接行数或者行数名作为参数,比如,b 8 就是在第8行打断点,还可以给外部的文件加上断点 b file_name:line_number,如果只敲 b ,会显示全部断点
    • c(ont(inue)):继续执行,当遇到断点时才会停止 ★★★
    • cl(ear) filename:lineno :可以清除断点,不过不加「断点号」,可以清除所有断点
    • disable bpnumber [bpnumber ...] :禁用指定[断点号]的断点
    • enable bpnumber [bpnumber ...]:启用指定[断点号]的断点
    • Enter:重复上次命令 ★★★
    • j(ump):设置下一步执行的行,这个语句可以让你跳过某些语句的执行,并不是网上一些文章说的跳到某行,跳到某行可不是代表会跳过某些语句的,文档最准确
    • ll or l:查看当前将要运行的代码段
    • n(ext):让程序运行下一行,如果当前语句有一个函数调用,用 n 是不会进入被调用的函数体中的 ★★★
    • pp expression or p expression:前者以 pprint 方式打印表达式的值,后者 print 方式 ★★★
    • q(uit):退出调试,同时,你也可以使用 Ctrl+D退出调试
    • r(eturn):继续执行,直到当前函数返回 ★★★
    • restart "restart" is an alias for "run". :是 run 命令的别名,重新启动调试器;
    • run [args...] :这里的参数会作为运行脚本的参数,等价于 python demo.py [args...],可以通过 sys.argv 查看参数列表,重新运行时,断点等信息会保留的
    • s(tep):和 n 相似,但是如果当前有一个函数调用,s 会进入被调用的函数体中 ★★★
    • w(here):打印一个堆栈跟踪,
    • ! :感叹号后面跟着语句,可以直接改变某个变量的值

    Httpie

    httpie是一个httpclient工具,能帮助我们快速的进行http请求,类似于curl但是语法做了很多简写,安装还是老规矩pip install httpie

    官方网址

    使用方式

    命令格式

    使用格式:http [设定选项] [HTTP动作] URL地址 [设定项]

    URL快捷写法

    httpie就是更为简便写法的curl的http client,体现在URL的写法上,相信看了下面两个示例即可了解一二。

    http http://localhost:32044/login = http :32044/login

    • 规则2: 端口80可以省略

    http http://localhost:80/login = http :/login

    HTTPS支持

    可以通过设定default-scheme来设定https

    设定方式:http --default-scheme=https 其他内容

    • 常用技巧

    设定alias可以更加便利的操作,这样就像HTTPIE的HTTPS版命令一样,可以直接使用https即可操作,不必每次执行都要加上default-scheme=https的设定
    alias https=‘http --default-scheme=https’

    HTTP请求设定

    常见的HTTP请求经常需要用到如下几种设定需要:

    类型 设定方式 备注
    设定Http header,比如Content-Type 设定项目名称:设定项目值 -
    设定URL的传入参数 设定项目名称==设定项目值 使用==来表示这种情况
    设定JSON对象或文件 field=设定值 或 field=@设定值 设定值为JSON对象或者可以转化的JSON文件名(与-f或者--form结合使用)
    设定JSON数据 field:=设定值 或 field:=@设定值 直接传入JSON设定内容
    设定form表单 field@设定值 仅与-f或者--form结合使用

    缺省设定

    JSON是Web服务的无冕的通用数据类型,在Httpie中也是对Http Header其进行了如下缺省设定,当然这些都可以进行覆盖。

    设定内容 设定值
    Content-Type application/json
    Accept application/json, /
    • 非字符方式的JSON项
      非字符方式的JSON向使用:=分隔符而不是=分割符。

    表单方式

    表单方式的提交与JSON类似,通过--form或者-f来进行,httpie会将其转化会Content-Type: application/x-www-form-urlencoded; charset=utf-8的设定之后进行处理,简化了用户的设定

    常见使用示例

    取消header的缺省设定

    命令:http URL/headers header设定项:

    • 使用示例:
    liumiaocn:~ liumiao$ http httpbin.org/headers Accept: User-Agent:
    HTTP/1.1 200 OK
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: *
    Connection: keep-alive
    Content-Encoding: gzip
    Content-Length: 99
    Content-Type: application/json
    Date: Sun, 14 Apr 2019 12:46:16 GMT
    Server: nginx
    
    {
        "headers": {
            "Accept-Encoding": "gzip, deflate", 
            "Host": "httpbin.org"
        }
    }
    
    liumiaocn:~ liumiao$
    
    liumiaocn:~ liumiao$ 
    liumiaocn:~ liumiao$ http httpbin.org/headers
    HTTP/1.1 200 OK
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: *
    Connection: keep-alive
    Content-Encoding: gzip
    Content-Length: 130
    Content-Type: application/json
    Date: Sun, 14 Apr 2019 12:46:39 GMT
    Server: nginx
    
    {
        "headers": {
            "Accept": "*/*", 
            "Accept-Encoding": "gzip, deflate", 
            "Host": "httpbin.org", 
            "User-Agent": "HTTPie/1.0.2"
        }
    }
    
    liumiaocn:~ liumiao$ 
    123456789101112131415161718192021222324252627282930313233343536373839404142
    

    将Header设定为空

    命令:http URL/headers ‘Header;’

    • 使用示例:
    liumiaocn:~ liumiao$ http httpbin.org/headers 'Header;'
    HTTP/1.1 200 OK
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: *
    Connection: keep-alive
    Content-Encoding: gzip
    Content-Length: 136
    Content-Type: application/json
    Date: Sun, 14 Apr 2019 12:47:06 GMT
    Server: nginx
    
    {
        "headers": {
            "Accept": "*/*", 
            "Accept-Encoding": "gzip, deflate", 
            "Header": "", 
            "Host": "httpbin.org", 
            "User-Agent": "HTTPie/1.0.2"
        }
    }
    
    liumiaocn:~ liumiao$ 
    12345678910111213141516171819202122
    

    设定Cookies

    Http客户端将cookies像Http Header一样发送至服务端,这意味这Httpie对于cookie的操作像普通的Header一样, 多项cookie设定中间用分号隔开

    命令:http URL ‘Cookie:设定项1=设定值1;设定项2=设定值2’

    设定Basic认证方式

    可以通过用户名/密码的Basic认证方式的,可以使用-a通过用户名和密码进行登录,使用方式如下:

    命令:http -a 用户名:密码 URL

    如果不设定密码时,则会提示密码的输入

    命令:http -a 用户名 URL

    另外可以活用.netrc文件来保存认证信息

    文件位置:~/.netrc

    • 内容示例
    machine URL
    login 用户名
    password 密码
    123
    

    设定proxy

    可使用如下设定示例进行http或者https的proxy的设定

    命令示例:
    http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 example.org

    需要使用用户名和密码的proxy场景可尝试如下方式:

    命令示例:http --proxy=http:http://user:pass@10.10.1.10:3128 example.org

    环境变量方式:同样也可以使用环境变量方式进行设定,这并非httpie的功能

    命令示例:
    export HTTP_PROXY=http://10.10.1.10:3128
    export HTTPS_PROXY=https://10.10.1.10:1080
    export NO_PROXY=localhost,example.com

    • socks proxy
      首先需要如下前提,需要requests[socks]的安装

    依赖事项:pip install -U requests[socks]

    命令示例:
    http --proxy=http:socks5://user:pass@host:port --proxy=https:socks5://user:pass@host:port example.org

    HTTPS访问

    • httpsURL中跳过ssl验证

    命令示例:http --verify=no https://example.org

    • 使用CA bundle

    命令示例:http --verify=/ssl/custom_ca_bundle https://example.org

    • 客户端使用证书访问

    命令示例:http --cert=client.pem https://example.org

    • 客户端结合使用私钥信息(证书中不包含私钥的情况)访问

    命令示例:http --cert=client.crt --cert-key=client.key https://example.org

    • 指定SSL版本进行访问
      缺省为SSL v2.3,可根据需要设定为ssl2.3/ssl3/tls1/tls1.1/tls1.2/tls1.3等

    命令示例:http --ssl=ssl3 https://vulnerable.example.org

    设定输出选项

    • 仅希望输出Http header

    命令格式:http --headers URL
    http -h URL

    • 仅希望输出Http body

    命令格式:http --body URL
    http -b URL

    • 输出Http header和body

    命令格式:http --verbose URL
    http -v URL

    重定向设定

    缺省的输入是通过stdin标准输入来进行,可通过<进行重定向,也可以使用|管道进行传递

    • 使用<重定向

    使用示例:http PUT example.com/person/1 X-API-Token:123 < person.json

    • 使用|传输

    使用示例:echo ‘{“name”: “John”}’ | http PATCH example.com/person/1 X-API-Token:123

    终端输出设定

    通过如下设定选项可以设定终端输出格式:

    设定项目 设定说明
    --pretty=colors 设定颜色
    --pretty=format 设定格式
    --pretty=all 设定颜色和格式,缺省行为
    --pretty=none 颜色与格式不设定,重定向时的缺省行为

    下载模式

    使用-d或者--download可以像wget一样进行下载

    命令:http -d URL

    • 使用示例:
    liumiaocn:~ liumiao$ http -d www.baidu.com
    HTTP/1.1 200 OK
    Bdpagetype: 1
    Bdqid: 0xbadab11d00183a3d
    Cache-Control: private
    Connection: Keep-Alive
    Content-Type: text/html
    Cxy_all: baidu+c18d2d97de93704b5bdacad076dfc57a
    Date: Sun, 14 Apr 2019 12:47:48 GMT
    Expires: Sun, 14 Apr 2019 12:46:57 GMT
    P3p: CP=" OTI DSP COR IVA OUR IND COM "
    Server: BWS/1.1
    Set-Cookie: BAIDUID=6BC656666AB4C0A81F799554CFCE9871:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: BIDUPSID=6BC656666AB4C0A81F799554CFCE9871; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: PSTM=1555246068; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: delPer=0; path=/; domain=.baidu.com
    Set-Cookie: BDSVRTM=0; path=/
    Set-Cookie: BD_HOME=0; path=/
    Set-Cookie: H_PS_PSSID=1424_21088_28773_28723_28558_28836_28584_28603_28605; path=/; domain=.baidu.com
    Transfer-Encoding: chunked
    Vary: Accept-Encoding
    X-Ua-Compatible: IE=Edge,chrome=1
    
    Downloading to "index.html"
    Done. 149.83 kB in 0.21465s (698.04 kB/s)
    liumiaocn:~ liumiao$ 
    1234567891011121314151617181920212223242526
    

    Session操作

    • 创建一个新的session

    命令示例:http --session=/tmp/session.json example.org API-Token:123

    • 使用既存的session

    命令示例:http --session=/tmp/session.json example.org

    • 创建一个命名会话(Name Session)

    命令示例:http --session=user1 -a user1:password example.org X-Foo:Bar

    *使用既存的session(Name Session)

    命令示例:http --session=user1 [example.org

    you-get

    安装

    直接上pip install you-get

    使用

    you-get url
    you-get url -O filename
    you-get url -a           auto rename
    you-get url -c COOKIES_FILE
    you-get -h  帮助文档
    

    UTOOLS1586701846629.png

  • 相关阅读:
    gdb typeid 详解
    make报错
    期末作业验收
    个人作业——软件工程实践总结作业
    原型设计(结对第一次)
    团队展示(团队)
    第二次作业——个人项目实战(sudoku)
    软件工程实践第一次作业--准备
    C++第一次课堂作业 circle
    第四次作业 计算器第二部分(未完)
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/12688154.html
Copyright © 2011-2022 走看看