python教程—python是否有一个“use strict;”和“;使用警告”;喜欢在perl中吗?-Python实用宝典

python教程—python是否有一个“use strict;”和“;使用警告”;喜欢在perl中吗?

我正在学习perl和python…与此同时,这不是我的设计,但它必须做到。问题:在我的txt的头部使用的perl脚本中(参见下面)。

我正在学习perl和python…与此同时,这不是我的设计,但它必须做到。

问题:

在我的txt头部使用的perl脚本中(参见下面)。

    #!/usr/bin/env perl use strict; use warnings;

在python脚本的例程中,我应该做些什么?

回答

为了提供一个答案,或许可以避免这里的注释噪音,我将尝试另一个。

在你最初的问题中,两个pragmata扩展到:

    use strict "vars"; use strict "refs"; use strict "subs"; use warnings;

依次回答下列问题:

  • 使用严格的“vars”的效果是,在没有首先声明变量是否存在的情况下,就会导致编译时引用变量时出现错误(例如,在C、c++和Java等更静态的语言中,这是默认值)。因为Python没有特定的语法来声明变量的存在,所以它没有等价的语法。在Python中为名称赋值总是在名称不存在的情况下创建它。strict的这个特性没有等效于Python的特性,并且它提供的安全性不能被重新创建。

例如:

    $ perl -c -e 'use strict "vars"; $foo = 1' Global symbol "$foo" requires explicit package name at -e line 1. -e had compilation errors. $ perl -c -e 'no strict "vars"; $foo = 1' -e syntax OK
  • 使用严格的“refs”的效果是不允许使用包含(现有或新)变量名称的纯字符串作为对变量本身的引用。Python没有这样做,所以没有必要禁用它。

例如:

    $ perl -e 'use strict "refs"; ${"message"} = "hello"; print $message' Can't use string ("message") as a SCALAR ref while "strict refs" in use at -e line 1. $ perl -e 'no strict "refs"; ${"message"} = "hello"; print $message' hello
  • 使用严格的“subs”的效果是导致编译时调用已知不存在的函数的任何尝试。Python不执行任何这样的检查,也没有办法启用这样的特性。

例如:

    $ perl -c -e 'use strict "subs"; foo' Bareword "foo" not allowed while "strict subs" in use at -e line 1. -e had compilation errors. $ perl -c -e 'no strict "subs"; foo' -e syntax OK
  • use warnings的作用是在编译和运行时对各种类型的行为启用更多的警告,这些行为在早期版本中是默认的,有时可能是需要的,或者从来就不是一个好主意,但严格来说并不是一个错误。例如,使用未初始化的值作为数字通常应该给出警告,但最初并没有这样做。

例如:

    $ perl -e 'use warnings; my $u; print 2 + $u' Use of uninitialized value $u in addition (+) at -e line 1. 2 $ perl -e 'no warnings; my $u; print 2 + $u' 2

最后;有人评论说Python在将来有类似的功能。但是,这不应该被认为类似于Perl的pragmata,因为后者的大部分都是字典范围的,并且可以根据需要在小范围内启用或禁用;Python的……future__只对整个源文件启用。

如。

    use strict; use warnings; my $total; $total += count_things($_) for @list; { no warnings 'uninitialized'; printf "The total is %dn", $total; }

这是一个有点做作的例子,但是这个例子演示了如何使用no warnings 'uninitialized'来禁用有关仅在printf语句中使用未初始化值的警告,同时仍然在其他地方启用其他警告。


总而言之:Python没有严格的使用或任何类似的安全特性,因为它提供的任何安全特性要么是强制性的,要么在Python语言中不可用,而且没有使用警告。它提供的那些特性只在文件级启用,不能在每个范围内选择性地启用或禁用。


Edit:实际上我已经被告知Python确实有一些可控制的警告标志,可以根据需要启用和禁用。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
2

发表评论