pycharm的python_stubs问题


Posted in Python onApril 08, 2020

最近在写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问题

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

Python 相关文章推荐
python使用电子邮件模块smtplib的方法
Aug 28 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Python配置mysql的教程(推荐)
Oct 13 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 #Python
解决pycharm下pyuic工具使用的问题
Apr 08 #Python
解决pyqt5异常退出无提示信息的问题
Apr 08 #Python
python由已知数组快速生成新数组的方法
Apr 08 #Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 #Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 #Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 #Python
You might like
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
js给selected添加options的方法
2015/05/06 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python中static相关知识小结
2018/01/02 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
基本款天堂:Everlane
2017/05/13 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
机电一体化应届生求职信范文
2014/01/24 职场文书
运动会通讯稿100字
2014/01/31 职场文书
小学生开学感言
2014/02/28 职场文书
环保建议书
2014/03/12 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
15个值得收藏的JavaScript函数
2021/09/15 Javascript
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript