标签: pythoninterpreter

为什么 3.10 中按预期抛出 RecursionError 的代码在早期版本中不会抛出?

首先我尝试了这个

def x():
   try:
      1/0 # just an division error to get an exception
   except:
      x()
Run Code Online (Sandbox Code Playgroud)

这段代码在 3.10 中表现正常,并且得到了我RecursionError: maximum recursion depth exceeded预期的结果,但 3.8 出现了堆栈溢出,并且无法正确处理递归错误。RecursionError但我确实记得旧版本的Python中也有,所以我尝试了

def x(): x()
Run Code Online (Sandbox Code Playgroud)

RecursionError这在两个版本的 Python 中都有体现。

就好像(在第一个片段中)递归错误永远不会在 except 中抛出,而是在调用的函数中抛出,然后在调用但由 try- except 处理的函数的第一条指令处抛出错误。

然后我尝试了其他方法:

def x():
   try:
      x()
   except:
      x()
Run Code Online (Sandbox Code Playgroud)

这在某种程度上更奇怪,3.10 以下的堆栈溢出,但在 3.10 中它陷入了循环

你能解释一下这种行为吗?

更新@MisterMiyagi 发现了一个更奇怪的行为,在 except in 中添加语句<=python3.9不会导致 stackoverflow

def x():
   try:
      1/0
   except:
      print("")
      x()
Run Code Online (Sandbox Code Playgroud)

python stack-overflow recursion try-except pythoninterpreter

10
推荐指数
1
解决办法
465
查看次数

如何使用 python PyQt5 确定我的应用程序(窗口)的活动屏幕(监视器)?

我正在开发一个使用许多小部件(QGroupBox、QVBoxLayout、QHBoxLayout)的应用程序。最初它是在普通的高清显示器上开发的。但是,最近我们中的许多人升级到了 4K 分辨率的显示器。现在一些按钮和滑块被压缩得非常小以至于无法使用。

现在我尝试进行一些更改,以便该应用程序可以与 HD 和 4K 显示器一起使用。

我开始阅读以下链接:

https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/在此处输入链接描述

我想每当我的窗口在特定监视器中打开时,我都可以调用以下代码:

if pixel_x > 1920 and pixel_y > 1080:
  Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, True)
  Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
else:
  Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, False)
  Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, False)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下代码获取显示器分辨率(pixel_x 和 pixel_y),使用相关帖子here

import sys, ctypes

user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
screen_width  = 0 #78
screen_height = 1 #79
[pixel_x , pixel_y ] = [user32.GetSystemMetrics(screen_width), user32.GetSystemMetrics(screen_height)]
Run Code Online (Sandbox Code Playgroud)

screen_width = 0, screen_height = 1给了我主显示器的分辨率(在我们的案例中主要是笔记本电脑,它们是高清的)。screen_width = 78, screen_height = 79给了我虚拟机的组合分辨率。但我不明白如何根据我的应用程序打开的位置动态获取这些值。

我的应用程序窗口的开发方式是,它将在上次关闭的同一监视器中打开。现在的问题是,每当我的 GUI 被调用并适应该分辨率时,我都想获得活动监视器分辨率。如果有人可以帮助我,我会很高兴。

我很想知道每次将窗口从高清显示器拖动到 4K 显示器时是否可以调用屏幕分辨率计算,反之亦然。

编辑:我在这里的这篇文章中发现了类似的东西,但我无法从中得到太多。

Edit2:基于@Joe …

python user-interface resolution pyqt5 pythoninterpreter

9
推荐指数
2
解决办法
2442
查看次数

为什么gunicorn调用sys.exit(1)?

Gunicorn有时使我的服务器崩溃,实际上以sys.exit(1)!退出了Python解释器。为什么是这样?请注意,故障并不总是在同一点。在下面显示的两种情况下,gunicorn's之前有一个不同的最后一个代码行exit。在这里运行的代码是openpyxl,这不会导致解释器关闭!

服务器内存不足吗?还有其他原因吗?

(这是Google容器引擎中Docker上Gunicorn上的Flask。)

情况1

  File "/virtualenv_for_docker/lib/python3.7/site-packages/openpyxl/descriptors/base.py", line 166, in __set__
    super(Bool, self).__set__(instance, value)
  File "/virtualenv_for_docker/lib/python3.7/site-packages/gunicorn/workers/base.py", line 196, in handle_abort
    sys.exit(1)
SystemExit: 1
Run Code Online (Sandbox Code Playgroud)

情况二

  File "/virtualenv_for_docker/lib/python3.7/site-packages/openpyxl/descriptors/serialisable.py", line 164, in __eq__
    def __eq__(self, other):
  File "/virtualenv_for_docker/lib/python3.7/site-packages/gunicorn/workers/base.py", line 196, in handle_abort
    sys.exit(1)
SystemExit: 1
Run Code Online (Sandbox Code Playgroud)

python-internals gunicorn docker pythoninterpreter

7
推荐指数
1
解决办法
1171
查看次数

python解释器上的简单if语句

环境:

  • Fedora 27(GNU/Linux)
  • 终奌站
  • python3.6.3

我在python解释器中运行这些简单的代码行时遇到问题,这是一个唯一的if语句或单独的if语句.

n = 5
if n == 4:
    print('n=4')
print('done')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这必须打印"完成"这个词,但我做错了什么?

python terminal python-interactive python-3.x pythoninterpreter

6
推荐指数
1
解决办法
3586
查看次数

Macbook M1 上的 VS Code 上的 python.pythonPath 提示“未知配置设置”

我刚刚开始接触编程,需要一些帮助。当我在 Mac 上打开 VScode 并且我的 python 解释器版本不会显示在状态栏中时,我的问题就开始了。我问过类似的问题: Python Interpreter Version not shown in status bar of VS code on Mac

我更深入地研究了它(https://www.youtube.com/watch?v=veJvQ88ULOM&t=193s),发现我可能需要给它一个路径,所以我正在寻找如何通过转到 code/preference/ 来设置它settings/ 然后单击打开设置 JSON(右上角图标)以将 python.pythonPath: "/opt/homebrew/opt/python@3.9/bin/python3.9" 放入大括号中以使其工作,但我的 VS 代码获胜甚至不认识 python.pythonPath。

任何帮助深表感谢!

macos pythonpath visual-studio-code pythoninterpreter

6
推荐指数
1
解决办法
1744
查看次数

Java中使用PythonInterpreter时的java.lang.ClassCastException

我正在尝试调用python函数从java(groovy)中传递HashMap.python函数对输入映射中的每个值进行平方,并返回具有相同键的正方形字典.

JythonTest.groovy

import org.python.util.PythonInterpreter
import org.python.core.*;

class JythonTest 
{
    static main(def args) 
    {
        PythonInterpreter pi;

        pi = new PythonInterpreter()
        pi.exec("from py1 import square3")
        PyFunction pf = (PyFunction)pi.get("square3")

        def map = ["value1":1,"value2":2,"value3":3]     //groovy map   
        PyDictionary pyDict = new PyDictionary(map)
        pf.__call__(pyDict)         //this is line 16 at which according to stack trace the exception is originated (as python function call occurs here)
    }
}
Run Code Online (Sandbox Code Playgroud)

py1.py

def square3(map):
    squareMap = {}
    for k,v in map.items():        #this is line 3 where according to stack trace …
Run Code Online (Sandbox Code Playgroud)

python java pythoninterpreter

5
推荐指数
0
解决办法
186
查看次数

Pycharm 说“tarfile.ReadError:文件无法成功打开”

今天,我尝试使用Python3.2. 但我发现有些不对劲。

当我试图找到我的 python 解释器的路径时,我得到了那个:

Python 3.2 (r32, Apr 18 2018)
>>> import sys
>>> print(sys.executable)
/usr/local/bin/python3.2
Run Code Online (Sandbox Code Playgroud)

所以我把这个路径放在了填充部分Base interpreter 上

Windows python 解释器 Pycharm 项目

但是当按下按钮创建项目时,会出现这个错误:

Traceback (most recent call last):
  File "/home/David/pycharm-community-2018.1.1/helpers/packaging_tool.py", line 159, in main
    retcode = do_untar(name)
  File "/home/David/pycharm-community-2018.1.1/helpers/packaging_tool.py", line 100, in do_untar
    tar = tarfile.open(name)
  File "/usr/local/lib/python3.2/tarfile.py", line 1744, in open
    raise ReadError("file could not be opened successfully")
tarfile.ReadError: file could not be opened successfully
Run Code Online (Sandbox Code Playgroud)

有人能告诉我出了什么问题吗?谢谢。

python pycharm python-3.2 pythoninterpreter

5
推荐指数
1
解决办法
2674
查看次数

如何让 Visual Studio Code 使用不同的 Python 解释器?

我是 VS Code/Python 的新手,我正在尝试让 VSCode 运行特定版本的 Python(似乎我安装了多个版本)。

我尝试了以下代码:

import sys
print(sys.version)
Run Code Online (Sandbox Code Playgroud)

当我运行文件时,出于某种原因,它显示:

  3.5.2 |Anaconda 4.2.0 (32-bit)| (default, Jul  5 2016, 11:45:57) [MSC v.1900 32 bit (Intel)]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下操作:在 VSCode 的最底部,我单击 Python 版本,然后单击“Python 3.7.3 64 位”,但是当我重新运行代码时,它仍然显示“3.5​​.2 |Anaconda ……”

我也尝试检查设置,它显示:

  Python: Python Path
    C:\Users\[MY_USE_NAME]\AppData\Local\Programs\Python\Python37-32\python.exe
Run Code Online (Sandbox Code Playgroud)

我还尝试在命令中键入“python”,但它仍然显示“Python 3.5.2”。

知道我做错了什么吗?我对 VS Code 很陌生,所以希望它很简单。

截屏

python visual-studio-code pythoninterpreter vscode-settings

5
推荐指数
2
解决办法
1万
查看次数

在java中使用PythonInterpreter导入python包

我正在尝试使用 PythonInterpreter 在 java 代码(在 Netbeans 中)中使用 python 代码中的函数,当 python 代码中没有任何导入的包时它工作得很好,但是在我的代码中,有一个包需要导入“tweepy “我收到一个错误:

java代码:

  import org.python.util.PythonInterpreter; 
  import org.python.core.*;

  public class test {
  public static void main(String[] args) {

  PythonInterpreter interpreter = new PythonInterpreter();
  interpreter.execfile("python_code.py");
  PyFunction getCountFunc = (PyFunction)interpreter.get("funcTw", PyFunction.class);
  PyObject pyCount = getCountFunc.__call__(new PyString("Test String"));
  String realResult = (String) pyCount.__tojava__(String.class);

  }
 }
Run Code Online (Sandbox Code Playgroud)

python代码(python_code.py):

try:
  import json
except ImportError:
  import simplejson as json

import tweepy
import sys


def funcTw(str):
 # function body ...
Run Code Online (Sandbox Code Playgroud)

运行java代码时出错:

Exception in thread "main" Traceback (most recent call …
Run Code Online (Sandbox Code Playgroud)

python java jython pythoninterpreter

5
推荐指数
0
解决办法
691
查看次数

“为什么”同一版本的 2 个不同的 python 可执行文件?

当我按下tab命令时python3.7,我得到以下信息

python3.7          python3.7-config   python3.7m         python3.7m-config
Run Code Online (Sandbox Code Playgroud)

我查了一下内容python3.7m并找到了答案 - /sf/answers/1167413761/

接下来我进入每个实现的python终端并输入以下代码

>>> import sysconfig
>>> sysconfig.get_config_var('EXT_SUFFIX')
Run Code Online (Sandbox Code Playgroud)

我在两个 python 实现中得到相同的输出,即.cpython-37m-darwin.so

我还尝试了该命令diff <(python3.7 -m sysconfig) <(python3.7m -m sysconfig)来查看两个可执行文件的配置信息是否有任何差异,但输出为空意味着它们是相同的。

如果所有可执行文件和配置变量都相同,那么为什么要创建两个不同的 python 实现呢?

笔记:

我不是在谈论python3.7/3.7m-config这里。

python python-3.x python-internals pythoninterpreter

5
推荐指数
1
解决办法
984
查看次数

CMake 找不到 python3

在我的 CMake 中,我有:

find_package(PythonInterp 3.6 REQUIRED)
Run Code Online (Sandbox Code Playgroud)

当我执行 cmake . 时,这工作正常,因为我在 /opt/local/bin 中有 python3.6。然而,当 CLion 执行相同的 cmake 时,它​​无法找到它。我怎样才能让它知道?

我尝试将 /opt/local/bin 添加到 PATH 并添加 python 解释器设置,但两者都不起作用。

path clion pythoninterpreter

2
推荐指数
1
解决办法
2万
查看次数

在 python 程序中解释 python 代码

是否有用于在 python 程序中解释 python 代码的库?
示例用法可能如下所示..

code = """
def hello():
    return 'hello'

hello()
"""

output = Interpreter.run(code)
print(output)
Run Code Online (Sandbox Code Playgroud)

然后输出 hello

python pip pythoninterpreter

0
推荐指数
1
解决办法
65
查看次数