相关疑难解决方法(0)

如果您在Python中导入自己,为什么不进行无限循环?

这个问题是对以下SO帖子的回应:

我如何挑选一个物体?

在该线程中,OP意外地在同一模块的顶部导入了自己的模块.为什么这不会导致无限循环?

python import infinite-loop

6
推荐指数
2
解决办法
732
查看次数

python - 初学者 - 在程序中集成optparse

我已经开始认真学习Python作为我的第一门编程语言,并掌握一些算法基础知识.由于每个人都建议最好的方法是找到有用的东西,我决定用一个小脚本来管理我的存储库.

基本事项: - 启用/禁用YUM存储库 - 更改当前YUM存储库的优先级 - 添加/删除存储库

虽然解析文件并替换/添加/删除数据非常简单,但我正在努力(主要是因为可能缺乏知识)与'optparse'的单一事物......我想添加一个选项(-l)列出了当前可用的存储库...我已经创建了一个简单的函数来完成这项工作(不是非常详细的),但是我无法将它与optparse上的'-l'连接起来.任何人都可以提供如何做到这一点的例子/建议?

当前脚本是这样的:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import optparse
import ConfigParse

repo_file = "/home/nmarques/my_repos.repo"

parser = optparse.OptionParser()
parser.add_option("-e", dest="repository", help="Enable YUM repository")
parser.add_option("-d", dest="repository", help="Disable YUM repository")
parser.add_option("-l", dest="list", help="Display list of repositories", action="store_true")
(options, args) = parser.parse_args()

def list_my_repos()
    # check if repository file exists, read repositories, print and exit
    if os.path.exists(repo_file):
        config = ConfigParser.RawConfigParser()
        config.read(repo_file)
        print "Found the following YUM repositories on " + …
Run Code Online (Sandbox Code Playgroud)

python optparse

6
推荐指数
2
解决办法
893
查看次数

如何在python 2.x交互模式下将参数传递给模块

我正在使用Python 2.7,我有以下简单的脚本,它需要一个命令行参数:

#!/usr/bin/env python

import sys

if (len(sys.argv) == 2):
   print "Thanks for passing ", sys.argv[1]
else:
   print "Oops."
Run Code Online (Sandbox Code Playgroud)

我可以从命令行执行以下操作:

My-Box:~/$ ./useArg.py asdfkjlasdjfdsa
    Thanks for passing  asdfkjlasdjfdsa
Run Code Online (Sandbox Code Playgroud)

或这个:

My-Box:~/$ ./useArg.py 
    Oops.
Run Code Online (Sandbox Code Playgroud)

我想通过交互式编辑器做类似的事情:

>>> import useArg asdfasdf
  File "<stdin>", line 1
    import useArg asdfasdf
                         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么做.如何在交互式编辑器中传递参数以导入/重新加载?

python command-line-arguments

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

登录框架

想象一下,有一个框架提供了一个方法logutils.set_up(),根据一些配置设置日志记录.

应尽早设置日志记录,因为导入库期间发出的警告不应丢失.

由于旧的way(if __name__=='__main__':)看起来很丑,我们使用console_script入口点来注册该main()方法.

# foo/daily_report.py
from framework import logutils
logutils.set_up()
def main():
    ...
Run Code Online (Sandbox Code Playgroud)

我的问题是logutils.set_up()可能会被调用两次:

想象一下,有一个第二个控制台脚本调用logutils.set_up()imports daily_report.py.

我可以更改框架代码并set_up()在第二次调用中什么也不做logutils.set_up(),但这感觉很笨拙.我想避免它.

我怎么能确定logutils.set_up()只执行一次?

python logging

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

__main__.py 中是否需要“if __name__ == '__main__'”?

在具有__main__.py, 而不是

# __main__.py
# def main...

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

...可以这样做吗:

# __main__.py
# def main...

main()
Run Code Online (Sandbox Code Playgroud)

编辑:

@user2357112-supports-Monica 的论点对我来说很有意义,所以我回过头来追踪给我带来问题的库,导致我仍在添加该if __...行。它是在调用python -m pytest --doctest-modules

也许这是唯一在跑步时出错的地方__main__.py?也许这是一个错误?

通过将文档中的第一个示例复制到a 中__main__.py

????????????????????????????????????????????????????????????????????????????????????? package/__main__.py ?????????????????????????????????????????????????????????????????????????????????????
package/__main__.py:58: in <module>
    args = parser.parse_args()
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:1755: in parse_args
    args, argv = self.parse_known_args(args, namespace)
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:1787: in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:2022: in _parse_known_args
    ', '.join(required_actions))
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:2508: in error
    self.exit(2, _('%(prog)s: error: %(message)s\n') % args) …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

显式相对导入的正确样板是什么?

PEP 366 -主模块显式相对导入中引入了模块范围变量__package__以允许在子模块中显式相对导入,有以下摘录:

当主模块由其文件名指定时,该 __package__属性将设置为None. 为了在直接执行模块时允许相对导入,在第一个相对导入语句之前需要类似于以下的样板:

if __name__ == "__main__" and __package__ is None:
    __package__ = "expected.package.name"
Run Code Online (Sandbox Code Playgroud)

请注意,仅当顶级包已经可以通过 sys.path. 需要额外的操作代码sys.path才能直接执行工作,而无需导入顶级包。

这种方法也有与使用兄弟模块的绝对导入相同的缺点——如果脚本被移动到不同的包或子包,样板将需要手动更新。它的优点是每个文件只需进行一次此更改,而不管相关导入的数量如何。

我尝试在以下设置中使用此样板:

当从文件系统执行子模块 bar.py 时,样板工作(PYTHONPATH修改使包 foo/ 可访问sys.path):

PYTHONPATH=$(pwd) python3 foo/bar.py
Run Code Online (Sandbox Code Playgroud)

当从模块命名空间执行子模块 bar.py 时,样板也可以工作:

python3 -m foo.bar
Run Code Online (Sandbox Code Playgroud)

但是,以下替代样板在这两种情况下都与 bar.py 子模块的内容一样有效:

if __package__:
    from …
Run Code Online (Sandbox Code Playgroud)

python boilerplate relative-import

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

JPA 与 Postgres 异常地将 @Lob 列中的文本写入为数字

我正在尝试使用@Lob具有 JavaString类型的列将其内容映射到TEXTPostgres 内部。这是相关实体:

@Entity(name="metadata")
public class Metadata {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "created_on")
    @ColumnDefault(value="CURRENT_TIMESTAMP")
    @Generated(GenerationTime.INSERT)
    private LocalDateTime createdOn;

    @Lob
    @Column(name = "content")
    private String content;

    @Column(name = "draft")
    private Boolean draft;

    @OneToMany(cascade = javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "metadata")
    private List<Attachment> attachments;

    public void addAttachment(Attachment attachment) {
        if (attachments == null) {
            attachments = new ArrayList<>();
        }
        attachments.add(attachment);
        attachment.setMetadata(this);
    }

    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

Metadata我有根据使用输入创建新实体的代码。我在 …

sql postgresql lob spring-data-jpa

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

什么是Java,C,C++和C#中的Main方法的Python等价物?

Python新手,来自Java(&Android)&C,C++,C#背景.基本上寻找相似之处.什么是python项目的入口点?喜欢其他语言的Main方法.具有多个.py脚本的项目,如何设置入口点?

python program-entry-point entry-point

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

multiproccesing and error 进程已经分叉,你不能安全地使用这个 CoreFoundation 功能

在 Python 2.7.8 上调用我的函数 start 并使用 multiprocessing 模块时出现此错误。我使用的是 mac OS 10.9.5。

The process has forked and you cannot use this CoreFoundation functionality safely. 
You MUST exec(). Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_
COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
Run Code Online (Sandbox Code Playgroud)

这是类格子下的代码。我的函数 sansfin 运行良好并返回一个布尔值,它只将 self 和一个整数作为参数进行循环。

    def start(self):
        if __name__ == '__main__':
            self.run = True
            p = Process(target=self.sansfin, args=(1000,))
            p.start()
            p.join()

    def stop(self):
        self.run = False
Run Code Online (Sandbox Code Playgroud)

我对这条消息很迷茫。我在那里和其他地方都没有发现任何有用的东西。有些人建议一个错误......

python macos multiprocessing

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

Python:另一个函数从一个函数访问返回的值

我是一般编程的新手,刚开始真正接触python。我正在做一个数字猜测项目。

import random

def main(): # main function
    print("Welcome to the number guesser game")
    range_func()
    max_guess_number(lower_range_cut, upper_range_cut)
    evaluation(random_number, total_guesses)

def range_func():   # allows user to select a range for the number guess
    print("Please select a range in which you would like to guess.")
    lower_range_cut = int(input("Lower boundary limit: "))
    global lower_range_cut
    upper_range_cut = int(input("Upper boundary limit: "))
    global upper_range_cut
    random_number = random.randint(lower_range_cut,upper_range_cut)
    global random_number
    return lower_range_cut, upper_range_cut, random_number

def max_guess_number(low,high): # returns the total number of guesses
    total_numbers = (high …
Run Code Online (Sandbox Code Playgroud)

python return function access

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