首先我尝试了这个
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
我正在开发一个使用许多小部件(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 …
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解释器中运行这些简单的代码行时遇到问题,这是一个唯一的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
我刚刚开始接触编程,需要一些帮助。当我在 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。
任何帮助深表感谢!
我正在尝试调用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) 今天,我尝试使用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 上。
但是当按下按钮创建项目时,会出现这个错误:
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)
有人能告诉我出了什么问题吗?谢谢。
我是 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 很陌生,所以希望它很简单。
我正在尝试使用 PythonInterpreter 在 java 代码(在 Netbeans 中)中使用 python 代码中的函数,当 python 代码中没有任何导入的包时它工作得很好,但是在我的代码中,有一个包需要导入“tweepy “我收到一个错误:
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)
try:
import json
except ImportError:
import simplejson as json
import tweepy
import sys
def funcTw(str):
# function body ...
Run Code Online (Sandbox Code Playgroud)
Exception in thread "main" Traceback (most recent call …Run Code Online (Sandbox Code Playgroud) 当我按下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这里。
在我的 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 解释器设置,但两者都不起作用。
是否有用于在 python 程序中解释 python 代码的库?
示例用法可能如下所示..
code = """
def hello():
return 'hello'
hello()
"""
output = Interpreter.run(code)
print(output)
Run Code Online (Sandbox Code Playgroud)
然后输出
hello
python ×9
java ×2
python-3.x ×2
clion ×1
docker ×1
gunicorn ×1
jython ×1
macos ×1
path ×1
pip ×1
pycharm ×1
pyqt5 ×1
python-3.2 ×1
pythonpath ×1
recursion ×1
resolution ×1
terminal ×1
try-except ×1