pycharm的python_stubs问题

最近在写udp socket程序时,对几个函数(如sendto)command+左击时,发现跳转到了这个python文件里面去了。(默认应该是到函数源码那里)

/PyCharm2018.1/python_stubs/160944109/_socket.py

定义了如下的伪函数

 def send(self, data, flags=None): # real signature unknown; restored from __doc__
 """
 send(data[, flags]) -> count

 Send a data string to the socket. For the optional flags
 argument, see the Unix manual. Return the number of bytes
 sent; this may be less than len(data) if the network is busy.
 """
 pass

 def sendall(self, data, flags=None): # real signature unknown; restored from __doc__
 """
 sendall(data[, flags])

 Send a data string to the socket. For the optional flags
 argument, see the Unix manual. This calls send() repeatedly
 until all data is sent. If an error occurs, it's impossible
 to tell how much data has been sent.
 """
 pass

google了下,发现已经有人在stackoverflow提出相关问题,我这里简单提炼一下。

https://stackoverflow.com/questions/24266114/pycharm-what-is-python-stubs

什么情况下会出现跳转到python_stubs?

当我们调用的函数是内置函数或仅二进制存在的函数(没有py文件,只有pyc等)时,pycharm会对某个版本进行硬编码而生成的伪函数(实际不是调用的这个,只是方便我们做开发)。

想一想pycharm为了方便我们,真是煞费苦心。

补充知识:Python3自定义日志类 mylog

大家还是直接看代码吧!

#encoding=utf-8

import os, sys
import datetime
import time

class Mylog(object):

 # 根文件夹
 root_dir = sys.path[0]
 # 根目录
 root_path = sys.path[0] + os.path.sep
 # 系统目录分割线
 sys_sep = os.path.sep
 # 配置
 option = {
 # 日志级别: 0:全部,1:调试,2:警告,3:错误
 'level': 0,
 # 是否开启,如果关闭则不输出也不记录日志
 'is_open': True,
 # 是否print输出
 'is_print': True,
 # 是否记录到日志文件
 'is_write': True,
 # 是否在每条日志内容前面加前缀
 'is_prefix': True,
 # 如果开启了每条日志前加前缀,设置日志级别为1的前缀
 'level_1_prefix': 'Test: ',
 # 如果开启了每条日志前加前缀,设置日志级别为2的前缀
 'level_2_prefix': 'Warning: ',
 # 如果开启了每条日志前加前缀,设置日志级别为3的前缀
 'level_3_prefix': 'Error: ',
 # 存放日志文件的根文件夹名称
 'root_dir_name': 'mylog',
 # 自定义存放日志文件的文件名称,此文件夹是在 root_dir_name 文件夹下
 'dir_name': ''
 }

 def __init__(self, config=None):
 if config is not None:
  self.option.update(dict(config))

 # 日志保存的文件夹(全路径)
 save_dir = self.root_path + self.option['root_dir_name']

 # 创建文件夹
 if os.path.isdir(save_dir) is not True:
  os.mkdir(save_dir)
 if len(self.option['dir_name']) > 0:
  save_dir += self.sys_sep + self.option['dir_name']
  if os.path.isdir(save_dir) is not True:
  os.mkdir(save_dir)

 self.save_dir = save_dir
 self.save_path = save_dir + self.sys_sep

 '''
 输入日志/记录日志
 '''
 def log(self, content='', level=0):
 self._print_log(content, level)
 self._write_log(content, level)

 '''
 输入日志
 '''
 def _print_log(self, content, level):
 if self.option['is_open'] is True and self.option['is_print'] is True:
  if self.option['level'] == 0 or self.option['level'] == level:
  if level > 0:
   content = self.option['level_' + str(level) + '_prefix'] + content
  print(content)

 '''
 记录日志
 '''
 def _write_log(self, content, level):
 if self.option['is_open'] is True and self.option['is_print'] is True:
  if self.option['level'] == 0 or self.option['level'] == level:
  if self.option['is_prefix'] is True:
   today = datetime.date.today()
   file_name = str(today) + '.log'
   now = time.strftime("%H:%M:%S")
   log_file = self.save_path + file_name
   if level > 0:
   content = self.option['level_' + str(level) + '_prefix'] + content
   if os.path.isfile(log_file):
   save_file = open(log_file, 'a')
   else:
   save_file = open(log_file, 'w')
   save_file.write(str(now) + "\r\n" + content + "\r\n")
   save_file.close()

**重点内容
#!/usr/bin/env python
#-*- coding: GBK -*-
__author__ = 'DiaoHuabin'

import logging
import getpass
import sys

#定义MyLog类
class MyLog(object):
 '''这个类用于创建一个自用的log'''
 def __init__(self): #类MyLog的构造函数
 user = getpass.getuser() #返回用户的登录名
 self.logger = logging.getLogger(user) #返回一个特定名字的日志
 self.logger.setLevel(logging.DEBUG) #对显示的日志信息设置一个阈值低于DEBUG级别的不显示
 logFile = './'+sys.argv[1][0:-3] + '.log' # 日志文件名
 formatter = logging.Formatter('%(asctime)-12s $(levelname)-8s %(name)-10s %(message)-12s')

 '''日志显示到屏幕上并输出到日志文件内'''
 logHand = logging.FileHandler(logFile) #输出日志文件,文件名是logFile
 logHand.setFormatter(formatter) #为logHand以formatter设置格式
 logHand.setLevel(logging.ERROR) #只有错误才被记录到logfile中

 logHandSt = logging.StreamHandler() #class logging.StreamHandler(stream=None)
 # 返回StreamHandler类的实例,如果stream被确定,使用该stream作为日志输出,反之,使用
 #sys.stderr
 logHandSt.setFormatter(formatter) #为logHandSt以formatter设置格式

 self.logger.addHandler(logHand) #添加特定的handler logHand到日志文件logger中
 self.logger.addHandler(logHandSt) #添加特定的handler logHandSt到日志文件logger中

 '''日志的5个级别对应以下的五个函数'''
 def debug(self,msg):
 self.logger.debug(msg) #Logs a message with level DEBUG on this logger.
 # The msg is the message format string

 def info(self,msg):
 self.logger.info(msg)

 def warn(self,msg):
 self.logger.warn(msg)

 def error(self,msg):
 self.logger.error(msg)

 def critical(self,msg):
 self.logger.critical(msg)

if __name__ == '__main__':
 mylogw = MyLog()
 mylogw.debug("I'm debug")
 mylogw.info("I'm info")
 mylogw.warn("I'm warn")
 mylogw.error("I'm error")
 mylogw.critical("I'm critical")

以上这篇pycharm的python_stubs问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决python ThreadPoolExecutor 线程池中的异常捕获问题

    问题 最近写了涉及线程池及线程的 python 脚本,运行过程中发现一个有趣的现象,线程池中的工作线程出现问题,引发了异常,但是主线程没有捕获异常,还在发现 BUG 之前一度以为线程池代码正常返回. 先说重点 这里主要想介绍 python concurrent.futuresthread.ThreadPoolExecutor 线程池中的 worker 引发异常的时候,并不会直接向上抛起异常,而是需要主线程通过调用concurrent.futures.Future.exception(timeou

  • 解决pyqt5异常退出无提示信息的问题

    问题:在pyqt界面运行中会异常退出,但是无出错代码追踪信息. 解决方法: 选中Emulate terminal in output console即可显示错误信息. 补充知识:python logging 日志 通过修饰器获取错误信息 今天公司要求研究一下python日志相关的信息,用户通过使用图形化界面产生错误后并不知道为什么报错.因此,要通过日志实现记录错误的功能. import functools import logging def create_logger(): logger =

  • 使用Python将Exception异常错误堆栈信息写入日志文件

    假设需要把发生异常错误的信息写入到log.txt日志文件中去: import traceback import logging logging.basicConfig(filename='log.txt', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') try: raise Exception('发生异常错误信息') except: #方案一,自己定义一个文件,自己把错误堆栈信息写入文件. #er

  • 解决pycharm下pyuic工具使用的问题

    我说一下我的错误地方: 我用cmd怎么都搞不定,不知道原因,找了好多方案都不管用,就希望pycharm下的pyuic可以用. 一开始我把生成的ui文件放在了自定义的ui目录下 如图: 然后点击: 虽然是出来了.py文件.但是打开之后一直是空啊,尼玛的蛋疼 后来找了好久才找到,ui文件放到根目录,然后在执行一遍,才出来 终于是出来了 我试着把控制台输出的命令写到cmd里. 上文执行成功的控制台输出: 仿照控制台写的cmd: 蛋疼的事依然发生,没用用,不报错也不生成文件,我草草草草草了. 折腾了一上

  • pycharm的python_stubs问题

    最近在写udp socket程序时,对几个函数(如sendto)command+左击时,发现跳转到了这个python文件里面去了.(默认应该是到函数源码那里) /PyCharm2018.1/python_stubs/160944109/_socket.py 定义了如下的伪函数 def send(self, data, flags=None): # real signature unknown; restored from __doc__ """ send(data[, fla

  • pycharm 使用心得(一)安装和首次使用

    首先预览一下 PyCharm 在实际应用中的界面:(更改了PyCharm的默认风格) 安装 首先去下载最新的pycharm 2.7.3,进行安装.可以直接在官网下载. PyCharm 的激活方式: 1,推荐购买正版. 2,可以选择试用,免费试用30天. 3,网上找激活码: (下面的激活码来自互联网,仅供学习交流之用) user name: EMBRACE key:14203-120420100000107Iq75C621P7X1SFnpJDivKnX6zcwYOYaGK3euO3ehd1MiTT

  • pycharm 使用心得(九)解决No Python interpreter selected的问题

    初次安装完PyCharm后,新建项目时,遇到了No Python interpreter selected的问题. 意思是说没有找到Python解释器.那我们添加Python解释器即可. Python–Preferences–Project Interpreter–Python Interpreter 点击"+"号选择系统安装的Python. 然后再返回Project Interpreter,选择刚添加的解释器. 现在就能新建项目了. 开始你的Python之旅吧.

  • pycharm 使用心得(八)如何调用另一文件中的函数

    实现步骤: 1. PyCharm, IDE有个Project setting图标,是给run图标做配置的,配置run file为myfile.py2. 复制代码 代码如下: # --------------------------------------#! /usr/bin/python# File: myfile.py# Author: Michael Fan from make.py import do def main():do() if __name__ == '__main__':m

  • pycharm 使用心得(三)Hello world!

    1,新建一个项目 File --> New Project... 2,新建一个文件右键单击刚建好的helloWord项目,选择New --> Python File 3,输入文件名输入文件名,没什么好说的 4,进入编写界面PyCharm的默认编辑界面很怪,会自动生成一行 __author__ = "作者" 的头.而比较常用的文件头,如:#coding=utf-8 等,反倒没有自动生成. 输入code: print "Hello word!" 5,设置控制

  • pycharm 使用心得(七)一些实用功能介绍

    实时比较 PyCharm 对一个文件里你做的改动保持实时的跟踪,通过在编辑器的左侧栏显示一个蓝色的标记. 这一点非常方便,我之前一直是在Eclipse里面用命令"Compare against HEAD" 来比较一个文件前后的改动. 在PyCharm中,你可以对你的改动一览无余.同时,点击那个标记,会显示出之前的内容以及一个工具栏: 你可以很容易地回滚这些改动,在一个详尽的对话框中查看这些改动或是将之前的文本粘贴到剪切板上. 提交时的比较预览在Eclipse 中,当你提交改动时,会有一

  • pycharm 使用心得(五)断点调试

    [运行]和[调试]前的设置,详见前面的文章,helloword. 1,设置断点 在代码前面,行号的后面,鼠标单击,就可以设置断点.如下: 2,调试 断点点击那个绿色的甲虫图标(似乎甲虫已经成为debug专用图标了),进行断点调试. 点击后,会运行到第一个断点.会显示该断点之前的变量信息. 点击Step Over 或者按F8,我们继续往下运行,到下一个断点: 补充: 断点的其他操作,和功能,大家可以把鼠标移到相应的按钮上,看一下,试试便知.如下: 总结: 这就是PyCharm的断点功能,还是很简单

  • PyCharm使用教程之搭建Python开发环境

    PyCharm是JetBrains系列产品的一员,也是现在最好用的IDE.PyCharm维持了JetBrains一贯高度智能的作风,简要枚举如下: 独特的本地VCS系统 强大的重构功能 基于上下文的智能代码提示和纠错 可以与IDEA.PhpStorm等IDE共享配置文件 PyCharm社区版免费下载地址:http://www.jetbrains.com/pycharm/ PyCharm我们注册破解版下载地址:http://www.jb51.net/softs/299378.html 安装完PyC

  • Python IDE PyCharm的基本快捷键和配置简介

    快捷键 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + Shift + Enter 语句完成 Ctrl + P 参数信息(在方法中调用参数) Ctrl + Q 快速查看文档 Shift + F1 外部文档 Ctrl + 鼠标 简介 Ctrl + F1 显示错误描述或警告信息 Alt + Insert 自动生成代码 Ctrl + O 重新方法 Ctrl + Alt + T 选中 Ctrl +

  • pycharm 使用心得(四)显示行号

    在PyCharm 里,显示行号有两种办法: 1,临时设置.右键单击行号处,选择 Show Line Numbers. 但是这种方法,只对一个文件有效,并且,重启PyCharm 后消失. 2,永久设置.File --> Settings -->Editor -->Appearance ,  之后勾选Show Line Numbers.

随机推荐